CS3L6——成员属性
CS3L6——成员属性
本章代码关键字
1 | get //属性中接收值时会执行的关键字 |
成员属性
属性是 C# 非常好用的语言功能,实际开发中强烈建议使用 公开成员属性 + 私有成员变量 来代替 公开成员变量
因为相比起直接使用公开成员变量,属性具有灵活性,在后续开发可以很方便地对属性读写添加或修改额外逻辑,并提高安全性
成员属性 一般是用来保护成员变量的,成员属性和使用和变量一样 外部用 对象.属性
调用
get
中需要 return
内容;set
中用 value
表示传入的内容
get
和 set
语句块内可以加逻辑处理,get和set可以加访问修饰符,但是要按照一定的规则进行添加
get
和 set
可以只有一个
自动属性是属性语句块中只有 get
和 set
,一般用于 外部不能改能得 的情况
属性用于保护成员变量,为成员变量的获取和赋值添加逻辑处理(例如加密等),解决访问修饰符的局限性
-
public
—— 内外访问 -
private
—— 内部访问 -
protected
—— 内部和子类访问
属性可以让成员变量在外部,只能获取不能修改 或者 只能修改不能获取,并为获取和修改添加额外逻辑
成员属性的基本语法
属性的命名一般用帕斯卡命名法
1 | 访问修饰符 属性类型 属性名 |
声明示例:
1 | class Person |
如果 get
或者 set
语句块只有一句代码,则可以使用 =>
来简写,=>
后跟对应的表达式语句:
1 | class Person |
属性的 get
或者 set
语句块内可以添加多个逻辑,以处理传入的值或者返回的值
1 | class Person |
成员属性的使用
成员属性本质是类似于只有返回值的或者只有一个参数的方法,因此属性可以如成员变量那样调用
1 | class Person |
输出:
1 | MrTang |
成员属性中 get 和 set 前可以加访问修饰符
注意
默认不加 会使用属性申明时的访问权限,加的访问修饰符要低于属性的方法权限 (
public
>protected
>private
)
不能让get
和set
的访问权限都低于属性的权限,否则属性的访问修饰符失去意义
1 | class Person |
内部 get
和 set
的访问修饰符不可高于属性声明用的访问修饰符,
例如,属性本身是 private
或 protected
的,那么内部 get
和 set
的访问修饰符就不可以是 public
的
成员属性 get 和 set 可以只有一个
当属性只能获取或只能修改时,get
和 set
可以只有一个,注意,get
和 set
只有一个时没必要再加访问修饰符了
1 | class Person |
上面的只能 get
的属性也被称为只读属性
由于,让外部只能获取而不能修改某个成员变量,又不做额外处理的情况非常多,
因此,属性只有 get
且 get
语句块只有一句代码时,属性的整个语句块,都可以使用 =>
来简写,=>
后跟要返回对应的表达式语句
1 | class Person |
自动属性
自动属性是没有特殊处理逻辑,会自动声明并关联成员变量的属性,它关联的成员变量,无需我们去显式声明
1 | class Person |
这个自动属性的 get
和 set
前可以加访问修饰符,也可以只有 get
(自动属性必须要有 get
),以限制外部的访问和修改
自动属性的好处是可以节约代码量,不需要再申明一个成员变量,
同时解决访问修饰符的局限性,直接用属性解决这个特殊的成员变量需求
这种属性就类似于成员变量,使用该属性会自动生成一个成员变量,而不需要为其申明成员变量
建议仅在 需要解决访问修饰符的局限性(让变量只读) 而又没有别的特殊处理的情况下使用自动属性,不鼓励全部使用自动属性来替代声明成员变量,
注意!自动属性和成员变量本质上不是相同的东西,切勿将两者混为一谈,自动属性在编译后本质上是方法,并管理一个自动生成的变量