将接口派生类转换为另一个派生类

时间:2012-07-26 21:36:19

标签: c# casting

我正在尝试实现一种方法,将从接口派生的给定对象转换为也从同一接口派生的不同类型。这样可以防止必须完全重建对象。

interface IItem
{
}

class FryingPan : IItem
{
}

class CookingPan : IItem
{
}

但是这里有捕获,我不知道'我投的是什么类型。我只知道一个类型变量。这是从组合框中设置的。

Type SelectedItem { get; set; }

可以这样做(最好不必实施IConvertable

1 个答案:

答案 0 :(得分:3)

如果您要做的是将CookingPan投射到FryingPan,则无法完成。一个人必须从另一个派生出来。想象;

interface IFruit
{ }

class Apple : IFruit
{ }

class Orange : IFruit
{ }

显然,苹果永远不会是橙色,反之亦然。但是,你可能将一个苹果或橙色投射到IFruit,因为它们都共享那个共同的祖先。或者,如果你是一个疯狂的科学家,也许你可以苹果变成橙色。 ; - )

我会说你以错误的方式接近你的问题。如果您需要根据其类型对IItem执行某些特定操作,那么您已经拥有该信息。如果您需要一些常见的排序条件,请考虑将其作为所有派生类型的公共祖先移动到基类/接口。