A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曹恒虎 黑马帝   /  2011-12-1 13:06  /  2995 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 曹恒虎 于 2011-12-1 14:56 编辑

看到有些源程序中的属性只有{get;set;},像如此简单的不设定任何条件,那和字段又有什么区别呢?岂不是多此一举?

评分

参与人数 1技术分 +1 收起 理由
李荣壮 + 1

查看全部评分

8 个回复

倒序浏览
我知道它是对私有字段的封装,应该有必要!
回复 使用道具 举报
这个其实就是微软把实现过程封装了起来, 所以我们才会只用两个单词就达到了访问与设置数据的实现.
你如果觉得太简单, 也用繁琐的调用方法:
get { return XXX; }
set { XXX= value; }

当然如果你不觉得的麻烦,也可以每次都自己来写
很简单就定义两个方法

呵呵, 其实微软把很多东西都封装起来了,所以我们每次写起来才那么顺手, .Net的魅力不就在这里吗?
回复 使用道具 举报
这样写VS里面会自动调取get和set方法,
好处就是因为字段都是用private修饰的(不能用public,否则就违反了封装的原则),外部无法修改访问字段的属性,就需要内部来写方法调用,但是如果每个字段都写一个方法就太麻烦了,就出现了get和set,如果没有了get和set外部就会无法访问和修改你的字段了(get为读属性,set为写)

具体可以看《第2季C#面向对象基础》-第2-3两个视频

评分

参与人数 1技术分 +1 收起 理由
李荣壮 + 1

查看全部评分

回复 使用道具 举报
李荣壮 发表于 2011-12-1 13:23
这个其实就是微软把实现过程封装了起来, 所以我们才会只用两个单词就达到了访问与设置数据的实现.
你如果觉 ...

可能大家没明白我的意思,我知道如果有条件限制的话,那么可以在set里加上条件,比如
public int Age
{
      get;
      set
      {
            if(value<0)
                  Console.WriteLine("输入有误");
            retrun;
      }
}
可是看到有些并没有啥条件限制,只有个{get;set;},这样不就像是直接操作字段了吗?还是说他只是为了以后加入条件而做准备?

评分

参与人数 1技术分 +1 收起 理由
李荣壮 + 1

查看全部评分

回复 使用道具 举报
听老师说,不管有没有条件限制,都得这样写,因为这才叫面向对象编程。是为了以后程序的扩展性。

评分

参与人数 1技术分 +1 收起 理由
李荣壮 + 1

查看全部评分

回复 使用道具 举报
李荣壮 黑马帝 2011-12-1 14:40:59
7#
曹恒虎 发表于 2011-12-1 14:30
可能大家没明白我的意思,我知道如果有条件限制的话,那么可以在set里加上条件,比如
public int Age
{

就是为了外部访问啊, 属性(基本?)都是public 你如果不设置这个,  怎么在类外面调用呢?

当然你可以直接在字段上设置为public 这样做语法上是没有问题的, 但是不推荐这么做, 会破坏类的封装性, 或者说破坏了面向对象的编程思想
回复 使用道具 举报
曹恒虎 黑马帝 2011-12-1 14:45:40
8#
谭显锋 发表于 2011-12-1 14:40
听老师说,不管有没有条件限制,都得这样写,因为这才叫面向对象编程。是为了以后程序的扩展性。 ...

如果是为了扩展性,那我就明白了

评分

参与人数 1技术分 +1 收起 理由
李荣壮 + 1

查看全部评分

回复 使用道具 举报
曹恒虎 发表于 2011-12-1 14:45
如果是为了扩展性,那我就明白了

get和set就是为了让外部或者别的类可以访问和修改这个字段的属性,因为字段都是用private修饰的,注意这个是私有的访问修饰符,外部或者别的类是无法访问到的,所有就要用到了get,set方法来修改和访问这个属性了,如果没有get或者set你可以写代码自己测试下就知道了要不要这了,注意,如果你的字段属性访问修饰符是public那在没条件的时候真不需要get和set,不过这违反了封装的原则

这个视频里面都有讲的,你按照我说的视频看看吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马