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

Nic*_*ell 2 c# inheritance interface function

这可能是最好用一个例子来描述的.

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

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

例如:

我叫Dog.ConvertFrom(cat),我得到了一只带有猫映射的字段的狗.

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

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

我想把它写成:

IAnimal ConvertFrom(IAnimal)
Run Code Online (Sandbox Code Playgroud)

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

Mat*_*t H 6

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

public interface IAnimal

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

public class Dog : IAnimal<Dog>

public class Cat : IAnimal<Cat>
Run Code Online (Sandbox Code Playgroud)

然后你的方法就像这样:

T ConvertFrom(IAnimal someAnimal)
Run Code Online (Sandbox Code Playgroud)