属性用于封装一些数据.可以使用普通字段:
public string MyField
但是这个字段可以被你的类的所有外部用户访问.人们可以插入非法值,或者以你意想不到的方式更改值.
通过使用属性,可以封装访问数据的方式.C#有一个很好的语法,可以将字段转换为属性:
string MyProperty { get; set; }
这叫做auto-implemented property.当需要时,您可以将您的房产扩展到:
string _myProperty;
public string MyProperty
{
get { return _myProperty; }
set { _myProperty = value; }
}
现在,您可以添加代码来验证setter
中的值:
set
{
if (string.IsNullOrWhiteSpace(value))
throw new ArgumentNullException();
_myProperty = value;
}
属性还可以具有不同的getter和setter访问器:
public string MyProperty { get; private set; }
通过这种方式,您可以创建一个每个人都可以读取但只能由类本身修改的属性.
您还可以为您的getter
个应用程序添加一个完全定制的实现:
public string MyProperty
{
get
{
return DateTime.Now.Second.ToString();
}
}
当C#编译自动实现的属性时,它会生成中间语言(IL).在您的IL中,您将看到一个get_MyProperty
和set_MyProperty
方法.它还创建了一个名为<MyProperty>k_BackingField
的支持字段(通常这在C#中是非法名称,但在IL中是有效的.这样,生成的类型和您自己的代码之间不会有任何冲突).但是,您应该使用C#中的官方属性语法.这在C#中创建了更好的体验(例如,使用IntelliSense).
按照惯例,您不应该对需要很长时间的操作使用属性.