內的System.Exception基類有以下特性(如親書C#5.0解釋):怎麼可能寫出看起來像只讀屬性?
public virtual string Message { get; }
這看起來像一個只讀屬性或常規性質沒有身體。無論哪種方式,我不能自己複製上面的代碼。
編輯:
如果這描述了一個普通的屬性,編譯器抱怨GET沒有主體。
內的System.Exception基類有以下特性(如親書C#5.0解釋):怎麼可能寫出看起來像只讀屬性?
public virtual string Message { get; }
這看起來像一個只讀屬性或常規性質沒有身體。無論哪種方式,我不能自己複製上面的代碼。
編輯:
如果這描述了一個普通的屬性,編譯器抱怨GET沒有主體。
究其原因,只爲Message
一個getter的是,它不是一個自動屬性。內部,這是消息是如何implmented(從.NET參考源採取):,最終用戶沒有讀或寫訪問該構件
[__DynamicallyInvokable]
public virtual string Message
{
[__DynamicallyInvokable] get
{
if (this._message != null)
return this._message;
if (this._className == null)
this._className = this.GetClassName();
return Environment.GetRuntimeResourceString("Exception_WasThrown", new object[1]
{
(object) this._className
});
}
}
內部Execption寫入值_message
,但它提供了一個包裝所以最終用戶只能讀取它的訪問權限。
如果你像這樣定義一個類:
public class YourClass
{
public string MyProperty { get; private set; }
}
它會出現得只到外面。 Exception
可能看起來是這樣的:
public class Exception
{
public Exception(string message)
{
this.Message = message;
}
public string Message { get; private set; }
}
本書沒有顯示實施Message
財產,而是其元。 (如你發現)試圖讓這樣的代碼行編譯將無法正常工作
要明白我的意思,彈出下面的代碼VS:
Exception e; string m = e.Message;
把光標放在Message
財產,然後打F12:你會被帶到圖書展示的那一行。
您是如何查看代碼的?如果您使用的是像DotPeek或Reflector這樣的工具,那麼您並不總是得到可編譯的源代碼。 – JMK
出書o_O? –
請包括更多細節。你提到的代碼完全可以工作 – Rohit