属性用于封装一些数据。您可以使用普通字段:
public string MyField
但该字段可以被您班级的所有外部用户访问。人们可以插入非法值或以您意想不到的方式更改值。
通过使用属性,您可以封装访问数据的方式。 C# 有一个很好的语法将字段转换为属性:
string MyProperty { get; set; }
这被称为自动实现的属性 http://msdn.microsoft.com/en-us/library/bb384054.aspx。当需要时,您可以将您的财产扩展到:
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
and set_MyProperty
方法。它还创建一个名为的支持字段<MyProperty>k_BackingField
(通常这在 C# 中是非法名称,但在 IL 中是有效的。这样您就不会在生成的类型和您自己的代码之间出现任何冲突)。但是,您应该使用 C# 中的官方属性语法。这在 C# 中创造了更好的体验(例如使用 IntelliSense)。
按照惯例,您不应将属性用于需要很长时间的操作。