1、作用:
就是保护字段,封装数据,对字段的赋值和取值进行限定,此时,给字段加上属性之后,在外界只需要访问属性即可,这样做,即保护了字段中的数据,又可以对赋值进行过滤。
2、要求:
一般采用Pascal命名法,数据类型和字段要一致,必须使用public修饰符。
3、属性的本质:
属性本身,其实没有保存数据!而字段才是真正的数据存储单元。属性就是两个方法,一个get(取值)和set(赋值)与js中的Object.defineProperty类似。
4、解释:
下边给字段_age加上属性,外界过可通过Age属性(new Person().Age)来间接的访问 _age字段(此时在外界也直接访问不到_age字段了,因为前边加上了private修饰符),访问属性时,会执行get方法,我们在get方法里边会直接返回_age(当然你也可以修饰、处理一下_age字段再返回);当外界赋值时,会执行set方法,下边value就是外界给属性赋的值,我们在里边加了一层判断,当赋值小于0时,会强制给value值改为1,之后在赋值给_age字段。
(注意:下边private是目前我们使用的第二的属性修饰符,私有的,下边有解释)
class Person { // 当给属性赋值时,会执行set方法,当输出属性值时,会执行get方法 private int _age; public int Age { get { return _age; } set { if (value < 0) { value = 1; } _age = value; } // 在c# 3.0以后使用自动属性(说就是上边写法的语法糖而已) // public int Age{ get; set; } } public void SEE() { Console.WriteLine($"今年{this.Age}岁"); Console.ReadLine(); } } class Person { public int Age { // 在c# 3.0以后使用自动属性,此时不需要写私有字段了,编辑器会帮助我们创建私有字段!!! public int Age{ get; set; } } public void SEE() { Console.WriteLine($"今年{this.Age}岁"); Console.ReadLine(); } }
访问修饰符:
public: 公共的,在哪都能访问到
private:私有的,只能在当前类的内部进行访问,出了这个类就访问不到了(补充:在类中,不写访问修饰符,默认就是private)。
英文单词:
Field:字段
Methods:方法
properties:属性