C#虚拟自动属性省略get/set方法

3
在声明为虚拟的自动属性中省略get或set是否可以?我参考了一本关于C#的书,其中System.Exception的成员如下所示:
// 属性 public virtual IDictionary Data { get; } public virtual string HelpLink { get; set; } public Exception InnerException { get; } public virtual string Message { get; } public virtual string Source { get; set; } public virtual string StackTrace { get; } public MethodBase TargetSite { get; }
如果自动属性需要同时具有get和set,那么为什么这里可以省略呢?
谢谢。
2个回答

4
这显示了有关此类型的元数据。它没有指定自动属性。如果自动属性只有一个访问器,则它们没有用处。基本上,它显示哪些属性是可读的,哪些是只读的(可能具有私有设置器)。

3
这似乎是属性的缩写签名,而不是它们的实际实现。
我没有去查看反编译器,但你可以想象上述 Exception.Data 的签名有两种实现方式:
public virtual IDictionary Data
{
    get { return _someInternalImplementation; }
}

或者:

public virtual IDictionary Data
{
    get { return _someInternalImplementation; }
    private set { _someInternalImplementation = value; }
}

所有实现者需要知道的是,他们只能在覆盖中拥有一个公共 getter。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接