黑马程序员技术交流社区

标题: 关于属性的问题 [打印本页]

作者: 轮回    时间: 2013-12-5 22:48
标题: 关于属性的问题
本帖最后由 轮回 于 2013-12-5 23:42 编辑

在一个类中定义一个属性和一个方法,以下面的为例:
  1. private string name;
  2. public string Name
  3. {
  4.      get;
  5.      set;
  6. }
  7. public void SayHello()
  8.         {
  9.             Console.WriteLine("我叫{0}", name);
  10.         }
复制代码
当在main函数中调用SayHello方法的时候不能输出姓名,将name换成Name就可以或者属性的定义换成下面的定义方式也行
  1.   public string Name
  2. {
  3.      get { return name; }
  4.      set { name = value;
  5. }
  6.         
复制代码

这样也可以调用,请问为什么简写的就不行,不是说3.0之后编译器会自动加上set和get的代码块的吗?为什么不行呢



作者: 不明觉厉    时间: 2013-12-5 22:52
你用简写属性的方法,自动给你添加了private string name,你就不能再添加name了
作者: 七里香    时间: 2013-12-5 23:25
自动属性是会给你添加一个私有字段,可能字段名是name,又或者是其他的反正不会是你定义的那个name变量,所以给第一段代码给属性Name赋值并不等于给你的私有字段name赋值所以没有输出,很正常。
第二种正常写法当然指定了属性给你的私有字段name赋值那么给属性赋值的时候就是给你的name字段赋值了哦。所以name里面有值。
作者: 轮回    时间: 2013-12-5 23:41
不明觉厉 发表于 2013-12-5 22:52
你用简写属性的方法,自动给你添加了private string name,你就不能再添加name了 ...

明白了,谢谢,忘记了会自动生成private字段了,只记得自动生成set和get代码块了
作者: 轮回    时间: 2013-12-5 23:41
七里香 发表于 2013-12-5 23:25
自动属性是会给你添加一个私有字段,可能字段名是name,又或者是其他的反正不会是你定义的那个name变量,所 ...

明白了,谢谢,忘记了会自动生成private字段了,只记得自动生成set和get代码块了
作者: 轮回    时间: 2013-12-5 23:44
原来3.0之后可以简写后,编译器帮我们添加的不只是set和get代码块,还有private字段,所以不需要自己再声明一个小写的字段了,感谢各位!(长时间不复习害死人啊。。。。。)
作者: 红鹰(Jake)    时间: 2013-12-6 00:16
给自己一个教训,学习一下。基础的东西还是要不断复习的。
作者: 上帝的尊严    时间: 2013-12-7 13:05
如果用自动属性,你就不能定义私有的字段,若定义了字段,就要把属性的内容补全




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