2013-08-15 13 views
85

いくつかのプロパティを持つインターフェースを作成しました。 インターフェイスの使用時にプライベートセッターを実装するにはどうすればよいですか?

インタフェースはクラスオブジェクトのすべてのプロパティを存在しなかった場合

は、インタフェースを使用している場合、これは許可されていない

しかし
{get; private set; } 

に設定されますので、これを達成することができそうだとすればどのように?インターフェイスで

答えて

164

あなたはしかし、あなたのクラスであなたがprivate setter持って、それを拡張することができる唯一のgetterあなたの財産のための

interface IFoo 
{ 
    string Name { get; } 
} 

を定義することができます -

class Foo : IFoo 
{ 
    public string Name 
    { 
     get; 
     private set; 
    } 
} 
+1

ありがとう、あなたは私を救った –

+8

何らかの理由で私はこれを決して覚えていない。私は私のキャリアの中でGoogleを介してこのページに約13回上陸したと思う。 LOL – Dan

+1

@ダンあなたは一人ではありません:D – Vahid

17

インタフェースは、パブリックAPIを定義します。 、

public interface IBar 
{ 
    int Foo { get; }  
} 

プライベートセッターは、(他のプライベートメンバなど)パブリックAPIの一部ではないので、あなたは、インターフェイスで定義することができません:パブリックAPIのみゲッターが含まれている場合は、インターフェイスにのみゲッターを定義します。しかし、あなたは任意の(私的な)メンバーをインターフェースの実装に自由に追加することができます。実際にはセッターはパブリックまたはプライベートとして実装されるかどうかは問題ではない、またはsetterがあるだろうとします

public int Foo { get; set; } // public 

public int Foo { get; private set; } // private 

public int Foo 
{ 
    get { return _foo; } // no setter 
} 

public void Poop(); // this member also not part of interface 

セッターは、インターフェイスの一部ではないので、それはあなたのインターフェースを介して呼び出すことはできません。

IBar bar = new Bar(); 
bar.Foo = 42; // will not work thus setter is not defined in interface 
bar.Poop(); // will not work thus Poop is not defined in interface 
関連する問題