C# 函数,该函数返回实现它的任何类的类型的对象

C# 函数,该函数返回实现它的任何类的类型的对象,c#,function,inheritance,interface,C#,Function,Inheritance,Interface,最好用一个例子来描述这一点 我有两个结构:狗和猫,它们都属于IAnimal IAnimal有一个函数ConvertFrom(IAnimal),它将从IAnimal继承的任何对象转换为与调用该函数相同的类型 例如: 我打电话给Dog.ConvertFrom(猫),我得到一只狗,它的字段映射在猫的上面 我给Cat.ConvertFrom(dog)打电话,我得到一只猫,它的字段映射自dog 有没有办法用接口来实现这一点?指定函数必须返回与实现该函数的类相同的类型 我只想把它写成: IAnimal Co

最好用一个例子来描述这一点

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

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

例如:

我打电话给Dog.ConvertFrom(猫),我得到一只狗,它的字段映射在猫的上面

我给Cat.ConvertFrom(dog)打电话,我得到一只猫,它的字段映射自dog

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

我只想把它写成:

IAnimal ConvertFrom(IAnimal)

但我更希望能够指定它是以狗或猫的身份回来的,而不是以IAnimal的身份回来的(这样可以减少进一步的投射)。

您可能在谈论实现静态多态性的方法。 您可以使用泛型来实现:

public interface IAnimal

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

public class Dog : IAnimal<Dog>

public class Cat : IAnimal<Cat>

我知道你在问什么。您是否在询问是否可以通过接口实现静态方法,即
Dog.ConvertFrom
Dog
Cat
是否具有兼容的字段?如果是这样,您是否只打算使用
Dog
Cat
?当你说
Dog.ConvertFrom(cat)
ConvertFrom
静态方法还是实例方法。如果你想优雅地做事,我首先建议你停止变异,走不可变+功能范式的道路……它们有一些兼容的字段,但并非所有字段都兼容。我计划随着时间的推移扩展IAnimal,以包括其他需要转换的内容。目前,我使用各种界面来显示每种动物所支持的内容(例如ICoat、ISpeed等),并可以使用这些界面在它们之间进行转换。这是一个真实的例子,用于Direct3D顶点类型,它们由着色器指定,但通常对象存储为一种类型的顶点,因此这些转换需要存在,并且需要可扩展。
T ConvertFrom(IAnimal someAnimal)