最好用一个例子来描述。
我有两个结构:狗和猫,它们都属于IAnimal。
IAnimal有一个函数ConvertFrom(IAnimal),它将从IAnimal继承的任何对象转换为与函数相同的类型。
E.g:
我打电话给Dog.ConvertFrom(cat),我得到了一只带有猫的地图的狗。
我打电话给Cat.ConvertFrom(狗),我得到一只带有从狗身上映射的字段的猫。
有没有办法用接口做到这一点?指定函数必须返回与实现函数的类相同的类型吗?
我想把它写成:
IAnimal ConvertFrom(IAnimal)
但是我宁愿能够指定它作为狗或猫回来而不是作为IAnimal(从而减轻进一步的演员)。
答案 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)