属性是一个方法或者一对方法。客户端看来是一个字段。

定义属性

public int StudyHours{

//啥不写,默认有get;set; 和后备字段studyHours是private的

get{

return studyHours;

}

set{

studyHours=value;

}

}

命名约定,共有属性采用Pascal大小写形式命名。并且如果存在一个等价的私有字段则它采用camel大小写形式命名。以前看的书上用_foreName来命名字段。

新手容易被大小写搞混,我一直就是,领导经常在面试中问别人写个属性,我每次都蒙圈。

一个属性里没有set,就不能给这个属性设置值,那么这个属性就是只读的。没有get,就是只写属性。但这样对客户端代码的作者容易迷惑。一般情况下,最好用个方法代替。

属性的访问控制符有助于控制属性的设置方式或者时间。

    public string Reason{

      get{return _reason;}//没有修饰符,那么get访问器具有属性的访问级别

      private set{_reason=value;} //外部类不能通过属性Reason给_reason赋值,只能读取其值。

    }

上面代码也可以自动实现,简写为

  public string Reason{

    get;

    private set;

  }

接下来书上提到了一个问题,我也怀疑过,叫内联,难道是inline?

我们通过属性访问字段,而不是直接访问字段。这些额外的函数调用是否会增加系统开销,导致性能下降?

答案不会的。C#代码会编译为IL,然后在运行时JIT编译为本地可执行代码。JIT Compiler可生成高度优化的代码,并在适当的时候随意地内联代码。(用内联代码代替函数调用)。如果实现某个方法或者属性仅仅是调用另一个方法,或者返回一个字段,则该方法或者属性肯定是内联的。

但注意,内联 or not 是CLR决定的。不像C++的inline来控制哪些方法是内联的。

属性就学到这里啦~下一节是构造函数,静态构造需要好好理解一下。

最新文章

  1. C语言For循环详解--saying2
  2. Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.7:run (dist) on project hadoop-kms: An Ant BuildException has occured
  3. 使用Async和Await进行异步编程(C#版 适用于VS2015)
  4. 十一个行为模式之责任链模式(Responsible Chain Pattern)
  5. 【leetcode】Maximum Gap(hard)★
  6. Elasticsearch--Date math在索引中的使用
  7. 给String添加reverse方法
  8. 如何打开Windows Server 2003 内存寻址扩展
  9. license文件生成原理
  10. Android ListView多布局讲解
  11. 用python抓取求职网站信息
  12. Docker:从头开始基于CentOS-Minimal安装Docker
  13. caffe 生成检测框并绘图
  14. js json日期格式转换日期方法
  15. 解决org.hibernate.QueryException illegal attempt to dereference collection 异常错误
  16. Qt图标自定义
  17. 51Nod 1080
  18. Flask实战第43天:把图片验证码和短信验证码保存到memcached中
  19. PIE SDK矢量数据的读取
  20. Laravel 调试利器 —— Laravel Debugbar 扩展包安装及使用教程

热门文章

  1. 【CodeVS】p1299 切水果
  2. 热烈庆祝华清远见2014嵌入式系统(Linux&Android)开发就业培训课程全面升级
  3. MyBatis的几种批量操作
  4. 制作、解析带logo的二维码
  5. [CareerCup] 15.3 Renting Apartment III 租房之三
  6. Daily Scrum 10.31
  7. PowerDesigner V16.5 安装文件 及 破解文件
  8. Android课程---布局管理器之相对布局(一)
  9. BigInteger在Java8中的改进
  10. 给RecyclerView实现的GridView加上HeaderView和FooterView