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