2011-07-03 72 views
3

當聲明爲虛擬時,可以忽略get或set在自動屬性中嗎?C#虛擬自動屬性省略get/set

我指的是C#的一本書,它顯示的System.Exception的成員如下:

 

// Properties 
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,那麼爲什麼它確定在這裏?

謝謝。

回答

3

這看起來像屬性的縮寫簽名,而不是他們的實際執行情況。

我「已經沒有去反射器,但你能想象在兩種方式中的一個上實現了Exception.Data上面的簽名:

public virtual IDictionary Data 
{ 
    get { return _someInternalImplementation; } 
} 

或者:

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

所有的執行者需要知道的是,他們可能只有一個公共getter在他們的覆蓋。

4

這顯示關於此類型的元數據。它沒有指定自動屬性。如果只有一個訪問器,自動屬性就沒有用處。

它基本上顯示哪些屬性存在,哪些是隻讀(也可能有一個private的制定者。