System.Exception 基本クラス内には、次のプロパティがあります (本 pro c# 5.0 で説明されているように)。
public virtual string Message { get; }
これは、読み取り専用プロパティまたは本体のない通常のプロパティのように見えます。いずれにせよ、上記のコードを自分で複製することはできません。
編集:
これが通常のプロパティを記述している場合、コンパイラは get に本体がないと文句を言います。
System.Exception 基本クラス内には、次のプロパティがあります (本 pro c# 5.0 で説明されているように)。
public virtual string Message { get; }
これは、読み取り専用プロパティまたは本体のない通常のプロパティのように見えます。いずれにせよ、上記のコードを自分で複製することはできません。
編集:
これが通常のプロパティを記述している場合、コンパイラは get に本体がないと文句を言います。
getter しかない理由Message
は、それが auto プロパティではないからです。内部的には、これが Message の実装方法です (.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
。エンド ユーザーはそのメンバーへの読み取りまたは書き込みアクセス権を持っていませんが、エンド ユーザーが読み取り専用アクセス権を取得できるようにラッパーを提供します。
この本はプロパティの実装を示しているのではMessage
なく、そのメタデータを示しています。そのようなコード行をコンパイルしようとしてもうまくいきません (あなたが発見したように)。
私が何を意味するかを確認するには、次のコードを VS にポップします。
Exception e; string m = e.Message;
カーソルをMessage
プロパティに置き、F12 を押します。本が示している行に移動します。