这可能是最好的例子。接口中的函数返回任何类实现它的类型的对象
我有两个结构:狗和猫,它们都属于IAnimal。
IAnimal有一个函数ConvertFrom(IAnimal),它将任何从IAnimal继承的对象转换为与调用函数相同的类型。
例如为:
我打电话Dog.ConvertFrom(猫)和我从猫映射在田野中的狗。
我打电话给Cat.ConvertFrom(狗),我得到一只猫,从狗映射过来的字段。
有什么办法可以用接口做到这一点?指定函数必须返回与实现该函数的类相同的类型?
我想简单地写它:
IAnimal ConvertFrom(IAnimal)
但我宁愿可以指定它要回来的狗或猫,而不是作为IAnimal(从而减轻进一步投)。
只是让我知道你要问什么。你问是否静态方法,即。 'Dog.ConvertFrom'可以通过接口实现吗? – 2013-03-02 20:23:44
“狗”和“猫”是否有兼容的字段?如果是这样,你只会使用'狗'和'猫'吗?当你说'Dog.ConvertFrom(cat)'是'ConvertFrom'一个静态方法或实例方法。如果你想优雅地做事情,我会首先建议你停止变异的事情,并采取不变的+功能范例的路线... – 2013-03-02 20:36:04
他们有一些兼容的领域,但不是所有的兼容。我计划随着时间的推移将IAnimal扩展到包括其他人,这将需要转化。目前我使用各种接口来显示每只动物所支持的内容(例如,ICoat,速度等),并可以使用它们进行转换。对于这是一个真实的例子,它是针对Direct3D顶点类型的,它们由着色器指定,但通常对象被存储为一种类型的顶点,所以这些转换需要存在,并且需要是可扩展的。 – 2013-03-02 20:39:52