您的位置:首页 > 编程语言 > C#

C#属性和字段

2016-06-19 16:11 344 查看
属性

  属性是一种用于访问对象或类的特性的成员。属性是字段的自然扩展,这两者都是具有关联类型的命名成员、而且访问字段和属性的语法是相同的。然而,与字段不同,属性不表示存储位置。相反属性具有访问器,这些访问器指定在它们的值被读取或写入时需执行的语句。因此属性提供了一种机制,它把读取和写入对象的某些特性与一些操作关联起来;它们甚至还可以对此类特性进行计算。

  虽然访问属性的方法和访问字段的方法相同,但是属性并不归类为变量。因此并不能将属性作为ref或out参数传递。

  属性声明包含extern修饰符时,称该属性为外部属性。因此外部属性不提供任何实际的实现,所以它的每个访问器声明都仅包含一个分号。

静态属性和实例属性

  属性声明包含static修饰符时,称为静态属性,不存在static时称为是属性。

  静态属性不与实例属性相关联,因此在静态属性的访问器内引用this会导致编译时错误。

  实例属性与类的一个给定的实例相关联,并且该实例可以在属性的访问器内用this来访问。

访问器:

  它的声明由一个get和set访问器声明,或者两个一起组成。每个访问器声明都包含标记get或set,后跟一个访问器体。对于abstract属性和extern属性。每个指定访问器的访问器体只是一个分号。对于所有非抽象、非外部属性的访问器、访问器体是一个块,它指定调用相应的访问器时需执行的语句。

  Get访问器相当于一个具有属性类型返回值的无参数方法。

  Set访问器相当于一个具有单个属性类型值参数和void返回类型的方法

属性的规则分类:

1. 同时包含get和set访问器的属性称为读写属性

2. 只具有get访问器的属性称为只读属性

3. 只具有set访问器的属性称为只写属性

属性和字段区别

  假如将字段声明为public,则在类的外部都可以对该字段进行访问和更改,违背了类的封装特性。如果声明为private,则这种形式的封装通常又过于彻底。例如,你可能希望字段从外部只读,但从内部可以更改,但需要验证对数据进行的更改。

以前,程序语言为了实现这些要求,采取的办法是将字段标记为私有,然后提供取值和赋值的方法来访问和修改数据。遗憾的是,这样做会影响类的可编程性。无法再用赋值运算符来设置类中的数据。另外,要想访问数据,只能调用方法来进行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: