c#类中的字段(域)和属性有什么联系和区别?
例子:
class Person
{
private string _name; //这是字段
public string Name //这是属性
{
get
{
return _name;
}
set
{
_name = value;
}
}
}
属性与成员变量(即字段)类似,它们都提供数据存储,但属性的功能远比成员变量强大。属性由特殊方法(Get和Set访问器)访问。Get和Set访问器允许在设置或检索属性之后验证属性值、执行其他代码或执行其他任务。
或许有人会问那类中写为public的变量,外部也可以访问和修改的啊。为什么还要这么麻烦?这么做是违反类的安全性设计原则的,一般的字段都是设为私有的。属性并不只是提供访问和赋值的功能,你可以在其中加入校检代码,例如上面的Person类再加一个属性Age表示年龄,在赋值的时候就可以加入校检代码。
class Person
{
private int _age;
public int Age
{
get
{
return _age;
}
set
{
if(0<value && value <140)
{
_age = value;
}
else
{
Console.WriteLine("年龄值不合法");
}
}
}
}
上面的例子只是简单的说明了属性的功能并不是只是提供访问和赋值的功能。并且每个属性并不一定有一个与之对应的字段,在C#3以上的版本中属性可以自动实现,格式如下:
class Person
{
public int Age
{
get;
set;
}
在属性的自动实现的时候,编译器会生成一个不能直接在源代码中引用的私有变量(即字段),并在属性取值方法和赋值方法中填充简单的代码来读写那个变量。
上面为个人理解,希望大家多多指正。