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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 轮回 中级黑马   /  2013-12-5 22:48  /  1211 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 轮回 于 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的代码块的吗?为什么不行呢


评分

参与人数 1技术分 +1 收起 理由
V_John + 1

查看全部评分

7 个回复

倒序浏览
你用简写属性的方法,自动给你添加了private string name,你就不能再添加name了

评分

参与人数 1技术分 +1 收起 理由
V_John + 1

查看全部评分

回复 使用道具 举报
自动属性是会给你添加一个私有字段,可能字段名是name,又或者是其他的反正不会是你定义的那个name变量,所以给第一段代码给属性Name赋值并不等于给你的私有字段name赋值所以没有输出,很正常。
第二种正常写法当然指定了属性给你的私有字段name赋值那么给属性赋值的时候就是给你的name字段赋值了哦。所以name里面有值。

评分

参与人数 1技术分 +1 收起 理由
V_John + 1

查看全部评分

回复 使用道具 举报
不明觉厉 发表于 2013-12-5 22:52
你用简写属性的方法,自动给你添加了private string name,你就不能再添加name了 ...

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

明白了,谢谢,忘记了会自动生成private字段了,只记得自动生成set和get代码块了
回复 使用道具 举报
原来3.0之后可以简写后,编译器帮我们添加的不只是set和get代码块,还有private字段,所以不需要自己再声明一个小写的字段了,感谢各位!(长时间不复习害死人啊。。。。。)
回复 使用道具 举报
给自己一个教训,学习一下。基础的东西还是要不断复习的。
回复 使用道具 举报
如果用自动属性,你就不能定义私有的字段,若定义了字段,就要把属性的内容补全
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马