1

私は次のようにインターフェースを持っています:

public interface IData
{
    String Name { get; set; }
}

そしてそれを実装する2つのクラス:

public class Data1 : IData
{
    public String Name { get; set; }
}

public class Data2 : IData
{
    public String Name { get; set; }
}

インスタンスの名前を取得できないようにする必要がありData2ます。コンパイラは、次のすべての形式を許可しているわけではありません。

internal String Name { get; set; }
private String Name { get; set; }
public String Name { private get; set; }

これが明示的に可能ではない論理的な理由を理解しています。プロパティは、実装されたアクセス修飾子についての手がかりを持たないインターフェイスを使用してアクセスされ、それが見つからない場合は失敗します。

私の使用例は、Data1Data2インスタンスの両方が、IDataパラメーターが使用されているメソッド (使用されていないメソッドの一部) を使用できる必要がありますがNameData2機密性が高く、直接アクセスするべきではありません。したがって、回避策を探しています。

4

2 に答える 2

2

コンパイラは、このインターフェイスを実装する型がこれを変更することを許可しません。public getter と setter を持つインターフェースを定義しました。

public interface IData
{
    String Name { get; set; }
}

2 つのインターフェイスが必要なようです。

public interface ISettableData
{
    String Name { set; }
}

public interface IData : ISettableData
{
    String Name { get; set; }
}

そして実装:

public class Data1 : IData
{
    public String Name { get; set; }
}

public class Data2 : ISettableData
{
    public String Name { set; }
}
于 2013-08-22T22:15:23.433 に答える