如果方法具有返回接口的类型,这意味着什么?

时间:2014-10-21 19:34:24

标签: c#

当我有这样的方法时:

public IEnumerator<string> GetEnumerator()
{
foreach (string str in array)
yield return str
}

方法“int”返回一个int。

但是一个返回界面的方法是什么意思?

3 个答案:

答案 0 :(得分:4)

对于IEnumerable<T>关键字,

yield有点特殊。基本上它意味着方法的返回类型是“Enumerable”,这意味着它是某种项目列表(在这种情况下为string)。

这个方法与它作为一个界面没有任何关系,神奇之处在于yield关键字。

More info on MSDN

答案 1 :(得分:2)

从技术上讲,它不会返回一个接口,而是返回一个使用该接口的对象的实例。这是一个称为Polymorphism的主题。

Polymorphism允许您返回从基类型或接口派生的类的不同实现。在您的代码中,您可以返回MyCollectionType或MyListType的实现(两者都是您可以创建的实现该接口的自定义集合类型),因为它们都实现了IEnumerator接口。

答案 2 :(得分:-1)

Interfaces只是通用合约,表示返回的实际类型可以执行x,y和z。

请考虑以下事项:

public interface IPerson
{
    string First { get; set; }
    string Last { get; set; }
}

然后,您可以使用不同类型的实现(ContactEmployee),但它们都可以调用FirstLast属性。

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)之类的内容枚举一些内容。