如何使用列表实现接口成员“f”?
public interface I
{
IEnumerable<int> f { get; set; }
}
public class C:I
{
public List<int> f { get; set; }
}
错误1'ClassLibrary1.C'未实现接口成员'ClassLibrary1.I.f'。 'ClassLibrary1.C.f'无法实现'ClassLibrary1.I.f',因为它没有匹配的返回类型'System.Collections.Generic.IEnumerable'。 c:\ users \ admin \ documents \ visual studio 2010 \ Projects \ ClassLibrary1 \ Class1.cs
答案 0 :(得分: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); }
}
}
答案 1 :(得分: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; }
}
}
使用课程C
时,只有一个f
成员可见:IList<int> f
。但是,当您将课程投放到I
时,您可以再次访问IEnumerable<int> f
成员。
C c = new C();
List<int> list = c.f; // No casting, since C.f returns List<int>.