2011-07-03 8 views
3

仮想プロパティを宣言したときに自動プロパティでgetまたはsetを省略することはできますか?C#仮想自動プロパティの取得/設定を省略する

 

// 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; } 

自動プロパティの両方が取得および設定する必要がある場合、なぜそれがここでokです:

は、私は次のようにのSystem.Exceptionのメンバーを示してC#の上の本を参照するのですか?

ありがとうございました。

答えて

3

これは、むしろ彼らの実際の実装よりも、プロパティの省略署名のように見えるかを示し。

私はリフレクターに行っていない」VEのが、あなたはException.Dataのための上記の署名は2つの方法のいずれかで実施されて想像:

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

または:

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

すべての実装者は、オーバーライドにパブリックゲッターしか持たないことを知る必要があります。

4

これは、このタイプに関するメタデータを表示します。自動プロパティは指定しません。自動プロパティは、アクセサが1つしかない場合は使用できません。

それは基本的な特性があるとどれおそらくprivateセッターを持っていることを(読み取り専用されている。