0

System.Exception 基本クラス内には、次のプロパティがあります (本 pro c# 5.0 で説明されているように)。

public virtual string Message { get; }

これは、読み取り専用プロパティまたは本体のない通常のプロパティのように見えます。いずれにせよ、上記のコードを自分で複製することはできません。

編集:

これが通常のプロパティを記述している場合、コンパイラは get に本体がないと文句を言います。

4

3 に答える 3

4

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。エンド ユーザーはそのメンバーへの読み取りまたは書き込みアクセス権を持っていませんが、エンド ユーザーが読み取り専用アクセス権を取得できるようにラッパーを提供します。

于 2013-06-18T17:49:47.777 に答える
1

この本はプロパティの実装を示しているのではMessageなく、そのメタデータを示しています。そのようなコード行をコンパイルしようとしてもうまくいきません (あなたが発見したように)。

私が何を意味するかを確認するには、次のコードを VS にポップします。

Exception e; string m = e.Message;

カーソルをMessageプロパティに置き、F12 を押します。本が示している行に移動します。

于 2013-06-18T17:50:38.897 に答える