2

リストを使用してインターフェースメンバー「f」を実装するにはどうすればよいですか?

public interface I
{
    IEnumerable<int> f { get; set; }
}

public class C:I
{
    public List<int> f { get; set; }
}

エラー1'ClassLibrary1.C'はインターフェイスメンバー'ClassLibrary1.If'を実装していません。「ClassLibrary1.Cf」は、「System.Collections.Generic.IEnumerable」の一致する戻りタイプがないため、「ClassLibrary1.If」を実装できません。c:\ users \ admin \ document \ visual studio 2010 \ Projects \ ClassLibrary1 \ Class1.cs

4

2 に答える 2

6

タイプのバッキングフィールドを使用できますが、次のList<int>ように公開しますIEnumerable<int>

public interface I
{
    IEnumerable<int> F { get; set; }
}

public class C:I
{
    private List<int> f;
    public IEnumerable<int> F
    {
        get { return f; }
        set { f = new List<int>(value); }
    }
}
于 2010-09-15T07:40:04.893 に答える
1

インターフェイスを明示的に指定することで非表示IEnumerable<int> fにすることもできます。I

public class C : I
{
    private List<int> list;

    // Implement the interface explicitly.
    IEnumerable<int> I.f
    {
        get { return list; }
        set { list = new List<int>(value); }
    }

    // This hides the IEnumerable member when using C directly.
    public List<int> f
    {
        get { return list; }
        set { list = value; }
    }
}

class を使用する場合、表示されるメンバーCは 1 つだけです: . ただし、クラスをキャストすると、メンバーに再度アクセスできます。fIList<int> fIIEnumerable<int> f

C c = new C();
List<int> list = c.f;   // No casting, since C.f returns List<int>.
于 2010-09-15T08:37:18.160 に答える