最好用一个例子来描述。

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

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

例如。:

我叫Dog.ConvertFrom(cat),然后得到一条狗,其中的字段是从cat映射过来的。

我叫Cat.ConvertFrom(dog),我得到一只猫,它的字段是从dog映射过来的。

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

我想简单地写成:

IAnimal ConvertFrom(IAnimal)


但我宁愿指定它以狗或猫的形式返回,而不是以IAnimal的形式出现(从而减轻了进一步的投放)。

最佳答案

您可能在谈论诸如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)

关于c# - 接口(interface)中的函数,该函数返回实现该类的对象的类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15179041/

10-10 02:13