只有在以下情况下才能使用自动属性:
- 该属性是可读写的;也就是说,它定义了
get
和set
访问器。如果您只定义一个访问器,则不能使用自动属性。(请注意,如果您希望属性在类外部的代码中是只读的,但在类内部是读写的,则可以在自动属性上定义访问器。)private set
- 您不需要在 setter 中进行任何验证——也就是说,属性类型的所有值都是有效的。
- 您不需要直接初始化支持字段,而是从构造函数设置属性(或仅在字段中保留默认值)。
- 您永远不需要直接引用支持字段,例如作为
ref
或out
参数。特别是,这将阻止您System.Threading.Interlocked
在现场使用这些方法。
- 字段的名称并不重要。(序列化是一种可能被认为很重要的情况。)
根据您的示例,您正在实现一个只读属性(没有设置器的属性)。在这种情况下,您不能使用自动属性,除非您使用如下模式:
class Example
{
public static string SomeProperty { get; private set; }
static Example()
{
SomeProperty = "some value";
}
}
但是,仅从 getter 返回常量值要简单得多,并且应该是首选:
class Example
{
public static string SomeProperty
{
get { return "some value"; }
}
}
这段代码清晰明了。自动属性应该使您的代码更具可读性。在这种情况下,他们实际上会混淆意图,所以我不会在这里使用一个。
请注意,示例代码中的属性根本不是自动属性;它只是一个标准属性。自动属性声明 getter 和 setter,但不提供实现。