字段和属性有什么区别?
class Student
{
private int age;
public int Age
{
get
{
return age;
}
set
{
age = value;
}
}
}
你有没有想过:为什么要有属性?为什么不直接将字段设置为公有?
简单的总结:属性更像是方法,用属性来代替直接访问字段可以有更好的逻辑控制。
比如:
class Student
{
private int age;
public int Age
{
get
{
return age;
}
set
{
if(age > 0 && age < 200)
{
age = value;
}
else
{
throw new Exception("年龄不合法");
}
}
}
}
当然也可以通过属性来限制只能设置或获取某一个字段的值。
一个属性是否必须和一个字段相对应?答案是不一定。
class Student
{
private int age;
public int Age
{
get
{
return 0;
}
set
{
//...
}
}
}
自动实现的属性,实现的原理?
在c#中可能会经常看到类似下面的属性:
class Student
{
//自动实现的属性
public int Age{ get; set; }
}
那它的内部实现机制呢?————单独的属性是不能存储数据的,数据都保存在字段中。
这是C#提供的一种简单的语法,称为自动实现的属性,声明属性而不提供get/set方法的实现,C#会自动的声明一个私有字段(编译器幕后做的工作)。在本例中,字段类型是int,也就是属性的类型。另外,编译器会自动实现get_Age和set_Age方法,分别返回和设置字段中的值。
get_Age和set_Age从哪来?
下一篇 C#篇(二)——属性的实质 我们再做分析。