黑马程序员技术交流社区

标题: get、set,像这种简单的属性有必要吗? [打印本页]

作者: 曹恒虎    时间: 2011-12-1 13:06
标题: get、set,像这种简单的属性有必要吗?
本帖最后由 曹恒虎 于 2011-12-1 14:56 编辑

看到有些源程序中的属性只有{get;set;},像如此简单的不设定任何条件,那和字段又有什么区别呢?岂不是多此一举?
作者: 许前刚    时间: 2011-12-1 13:14
我知道它是对私有字段的封装,应该有必要!
作者: 李荣壮    时间: 2011-12-1 13:23
这个其实就是微软把实现过程封装了起来, 所以我们才会只用两个单词就达到了访问与设置数据的实现.
你如果觉得太简单, 也用繁琐的调用方法:
get { return XXX; }
set { XXX= value; }

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

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

具体可以看《第2季C#面向对象基础》-第2-3两个视频
作者: 曹恒虎    时间: 2011-12-1 14:30
李荣壮 发表于 2011-12-1 13:23
这个其实就是微软把实现过程封装了起来, 所以我们才会只用两个单词就达到了访问与设置数据的实现.
你如果觉 ...

可能大家没明白我的意思,我知道如果有条件限制的话,那么可以在set里加上条件,比如
public int Age
{
      get;
      set
      {
            if(value<0)
                  Console.WriteLine("输入有误");
            retrun;
      }
}
可是看到有些并没有啥条件限制,只有个{get;set;},这样不就像是直接操作字段了吗?还是说他只是为了以后加入条件而做准备?
作者: 谭显锋    时间: 2011-12-1 14:40
听老师说,不管有没有条件限制,都得这样写,因为这才叫面向对象编程。是为了以后程序的扩展性。
作者: 李荣壮    时间: 2011-12-1 14:40
曹恒虎 发表于 2011-12-1 14:30
可能大家没明白我的意思,我知道如果有条件限制的话,那么可以在set里加上条件,比如
public int Age
{

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

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

如果是为了扩展性,那我就明白了
作者: 周敏_.net    时间: 2011-12-1 15:02
曹恒虎 发表于 2011-12-1 14:45
如果是为了扩展性,那我就明白了

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

这个视频里面都有讲的,你按照我说的视频看看吧




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2