接口中的函数,它返回任何类的类型的对象实现它

时间:2013-03-02 20:22:31

标签: c# function inheritance interface

最好用一个例子来描述。

我有两个结构:狗和猫,它们都属于IAnimal。

IAnimal有一个函数ConvertFrom(IAnimal),它将从IAnimal继承的任何对象转换为与函数相同的类型。

E.g:

我打电话给Dog.ConvertFrom(cat),我得到了一只带有猫的地图的狗。

我打电话给Cat.ConvertFrom(狗),我得到一只带有从狗身上映射的字段的猫。

有没有办法用接口做到这一点?指定函数必须返回与实现函数的类相同的类型吗?

我想把它写成:

IAnimal ConvertFrom(IAnimal)

但是我宁愿能够指定它作为狗或猫回来而不是作为IAnimal(从而减轻进一步的演员)。

1 个答案:

答案 0 :(得分:6)

你可能正在谈论像Curiously Recurring Template Pattern之类的东西来实现静态多态。 您可以使用泛型来:

public interface IAnimal

public interface IAnimal<T> : IAnimal where T : IAnimal<T>

public class Dog : IAnimal<Dog>

public class Cat : IAnimal<Cat>

然后你的方法就像:

T ConvertFrom(IAnimal someAnimal)