2

这可能最好用一个例子来描述。

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

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

例如:

我调用 Dog.ConvertFrom(cat) 并得到一只狗,其字段映射自 cat。

我调用 Cat.ConvertFrom(dog) 并得到一只猫,其字段映射自 dog。

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

我想简单地把它写成:

IAnimal ConvertFrom(IAnimal)

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

4

1 回答 1

6

您可能正在谈论诸如奇怪重复模板模式之类的东西来实现静态多态性。您可以使用泛型来拥有:

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)
于 2013-03-02T20:30:35.757 回答