.NET中的属性

.NET中的属性

    属性允许源代码用一个简化的语法来调用一个方法。CLR支持两种属性:无参属性,简称属性;有参属性,C#简称索引器。

1、无参属性

    定义属性时,编译器在最后的程序集中生成以下两项或三项内容。编译器会在指定的属性名之前附加get_或set_前缀生成这些方法的名称。当对这些属性的访问其实就是调用get_或set_方法。

  • 托管程序集元数据中的一个属性定义。
  • 属性定义了get访问器方法时生成一个get访问器方法的方法。
  • 属性定义了set访问器方法时生成一个set访问器方法的方法。

 

属性、字段和方法的选择,属性看起来与字段相似,但本质上是方法,这个问题很容易造成误解:

  • 属性可以是只读或只写的,字段访问总是可读和可写的。
  • 一个属性方法可能抛出异常;字段访问永远不会抛出异常。
  • 属性不能作为out或ref参数传递、字段却可以。
  • 属性方法可能花费较长时间执行;字段的访问总是立即完成。
  • 如果连续调用多次,属性方法每次都可能返回一个不同的值;而字段每次调用都返回相同的值。例如:DateTime.Now。此类现象都应该修改为方法。
  • 属性方法可能造成明显的side effect(除了单纯的设置或获取属性,还会造成对象状态的改变);字段访问永远不会。
  • 属性方法可能需要额外的内存,或返回一个不正确的引用,指向不属于对象状态一部分的某个东西(这样一来,对返回对象的修改就作用不到原始对象了)。相反,字段返回的总是正确的引用,它指向的东西保证是原始对象状态的一部分。
  • 使用会返回一个拷贝的属性时,非常容易引起混淆。
posted @ 2011-08-22 16:02  连风  阅读(667)  评论(0编辑  收藏  举报