C#属性和字段

Posted 静水深流

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#属性和字段相关的知识,希望对你有一定的参考价值。

属性

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

  虽然访问属性的方法和访问字段的方法相同,但是属性并不归类为变量。因此并不能将属性作为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,则这种形式的封装通常又过于彻底。例如,你可能希望字段从外部只读,但从内部可以更改,但需要验证对数据进行的更改。

       以前,程序语言为了实现这些要求,采取的办法是将字段标记为私有,然后提供取值和赋值的方法来访问和修改数据。遗憾的是,这样做会影响类的可编程性。无法再用赋值运算符来设置类中的数据。另外,要想访问数据,只能调用方法来进行。

以上是关于C#属性和字段的主要内容,如果未能解决你的问题,请参考以下文章

C# 字段和属性 [重复]

属性和字段的区别和联系

c#中字段和属性的区别

C#详解属性

C# 字段属性成员变量 [转载]

c#基础知识 属性和索引