いくつかのプロパティを持つインターフェースを作成しました。
インターフェイスが存在しない場合、クラスオブジェクトのすべてのプロパティは次のように設定されます。
{ get; private set; }
ただし、これはインターフェイスを使用している場合は許可されないため、これを実現できますか?
いくつかのプロパティを持つインターフェースを作成しました。
インターフェイスが存在しない場合、クラスオブジェクトのすべてのプロパティは次のように設定されます。
{ get; private set; }
ただし、これはインターフェイスを使用している場合は許可されないため、これを実現できますか?
回答:
インターフェースでgetter
は、プロパティに対してのみ定義できます
interface IFoo
{
string Name { get; }
}
ただし、クラスで拡張してprivate setter
-
class Foo : IFoo
{
public string Name
{
get;
private set;
}
}
インターフェイスはパブリックAPIを定義します。パブリックAPIにゲッターのみが含まれる場合は、インターフェースでゲッターのみを定義します。
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
セッターはインターフェイスの一部ではないため、インターフェイスから呼び出すことはできません。
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