158

いくつかのプロパティを持つインターフェイスを作成しました。

インターフェイスが存在しない場合、クラス オブジェクトのすべてのプロパティが設定されます。

{ get; private set; }

ただし、インターフェイスを使用する場合、これは許可されていないため、これを達成できますか?

4

2 に答える 2

308

getterインターフェイスでは、プロパティに対してのみ定義できます

interface IFoo
{
    string Name { get; }
}

ただし、クラスでは、それを拡張してprivate setter-

class Foo : IFoo
{
    public string Name
    {
        get;
        private set;
    }
}
于 2013-08-15T09:37:07.497 に答える
31

インターフェイスはパブリック API を定義します。パブリック API に getter のみが含まれている場合は、インターフェイスで getter のみを定義します。

public interface IBar
{
    int Foo { get; }    
}

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

 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

Setter はインターフェイスの一部ではないため、インターフェイス経由で呼び出すことはできません。

 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
于 2013-08-15T09:38:41.340 に答える