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