当我有这样的方法时:
public IEnumerator<string> GetEnumerator()
{
foreach (string str in array)
yield return str
}
方法“int”返回一个int。
但是一个返回界面的方法是什么意思?
答案 0 :(得分:4)
IEnumerable<T>
关键字, yield
有点特殊。基本上它意味着方法的返回类型是“Enumerable”,这意味着它是某种项目列表(在这种情况下为string
)。
这个方法与它作为一个界面没有任何关系,神奇之处在于yield
关键字。
答案 1 :(得分:2)
从技术上讲,它不会返回一个接口,而是返回一个使用该接口的对象的实例。这是一个称为Polymorphism的主题。
Polymorphism允许您返回从基类型或接口派生的类的不同实现。在您的代码中,您可以返回MyCollectionType或MyListType的实现(两者都是您可以创建的实现该接口的自定义集合类型),因为它们都实现了IEnumerator
接口。
答案 2 :(得分:-1)
Interfaces
只是通用合约,表示返回的实际类型可以执行x,y和z。
请考虑以下事项:
public interface IPerson
{
string First { get; set; }
string Last { get; set; }
}
然后,您可以使用不同类型的实现(Contact
,Employee
),但它们都可以调用First
和Last
属性。
public interface Contact : IPerson
{
public string First { get; set; }
public string Last { get; set; }
// Maybe other methods too
}
public interface Employee : IPerson
{
public string First { get; set; }
public string Last { get; set; }
// Maybe other methods too
}
假设您有以下方法:
public IPerson GetPerson()
{
var contact = new Contact();
var employee = new Employee();
// You can return either of these objects and the code that call it will be able to call the `First` and `Last` parameters.
}
使用您的示例IEnumerable<T>
,您可以为for (var item in list)
之类的内容枚举一些内容。