属性的定义
定义结构:
public int MyIntProp{
get{
//get code
}
set{
//set code
}
}
- 定义属性需要名字和类型。
- 属性包含两个块:get块和set块。
- 访问属性和访问字段一样,当取得属性的值得时候,就会调用属性中的get块,因此get块需要返回值,其返回值类型就是属性的类型;当我们去给属性设置值得时候,就会调用属性中的set块,以此可以在set块中通过value访问到我们所设置的值。
eg:
//跟访问字段的方式一样
v1.MyIntProperty = 600; //对属性设置值,自动调用set块
int temp = v1.MyIntProperty //对属性取值,自动调用get块
需要注意的是,set方法和get方法可以不同时存在。
但是如果没有get块,就不可以获得取值;如果没有set块,就不能进行设置值。
通过属性访问字段
一般而言,习惯于将字段设置为private,这样外界就不能修改字段的值。这是我们可以通过定义属性来设置字段和获取字段的值。
eg:
private int age;
public int Age{ //习惯字段小写,属性大写
set{
if(value<0) return; //通过set值进行一些校验的工作
age = value;
}
get{
return age;
}
}
- 设置属性的只读或者只写
只读
private string name;
public string Name{
get{
return name;
}
只写
private string name;
public string Name{
set{
name = value;
}
- 属性的访问修饰符
//如果在get或set块钱加上private,表示这个块只能在类内进行调用
public float X{
private set { x = value;}
get { return x;}
public float X{
set { x = value;}
private get { return x;}
- 自动实现的属性
public int Age{set;get;} //编译器会自动提供字段来存储age
-->等价于
public int Age{
set{ age = value;}
get{ return age;}
总结一下,属性就相当于是一种带有set和get方法的一个方法,而它与类中的字段的赋值和取值又是息息相关的。