一、C#有5种修饰符
注意:类只能用public, Internal来修饰,默认值:public
成员能用以上5种来修饰,默认值:Private
二、字段(filed)
可以在声明字段的同时赋给它一个初始值。
如: public int month=7;
public double salary=3500;
三、属性(property)
就如上面的工资,一般是保密的,那么就必须使用私有的字段,这样就不能直接来访问。我们可以使用方法来达到目的,但如果对每一个字段都去编写一个方法来进行读 写操作似乎又麻烦了些。那么就用属性以灵活的方式实现了对私有字段的访问,它是一种“访问器”方法,包括get方法和set方法,更明确地说,属性就是 方法的精简写法的实现,隐藏了实现和验证的代码。它有两个访问器:
get访问器用于获取属性的值。
set访问器用于设定属性的值。既然它是方法,且是要在方法内对私有字段用新值进行更改替换,那么它就是可以(或者说是应该)接收参数的, value 关键字就是用于定义由 set 取值函数分配的值。
public class Student { private string _name; public string Name { get { return _name; } set { _name = value; } } }
3.1 属性按可以访问的类型分为三种不同的类型:
(一)读/写属性
读/写属性是一个具有get()和set()访问器的属性
语法: [访问修饰符] 数据类型 属性 {get{ }; set{ }; }
(二)只读属性
仅具有get()访问器属性称为只读属性.
语法: [访问修饰符] 数据类型 属性名 {get{ }; }
(三)只写属性
仅具有set()访问器属性称为只写属性,不推荐使用只写属性.
语法: [访问修饰符] 数据类型 属性名 {set{ }; }
(1)属性可以保证安全,当不在本类中使用时可以保证使用属性名可以避免用字段的名字。
(2)属性的set和get函数可以限制字段的一些功能,以达到某种目的。
(3)属性没有存储数据的功能,数据都存在字段中,所以只有修改字段的数据才能更改数据,修改属性的值没用。
class Emp { //ctrl+R+E //右键|重构|封装字段 private string name; //字段 public string Name //属性 { get { return name; } set { name = value; } } private int age; public int Age { get { return age; } set { //判断1-100 (value 就是参数(固定)) if (value >= 1 && value <= 100) { // this.age = age; //this 当前对象; 区分成员变量与形式参数的名字相同 age = value; } else { Console.WriteLine("年龄不符!"); } } } }
四、总结
属性是封装了对类内部私有字段成员的访问,它提供了一种书写更简便、访问控制更安全实现方式。
我们应该尽量避免在属性的访问器内进行过多的逻辑运算,如果确实有复杂的逻辑运行,请使用方法。
尽可能编写出运行效率更高,更健壮,更容易维护的C#代码。尽可能的使用属性(property),而不是数据成员(field)。