【发布时间】:2009-08-27 17:26:44
【问题描述】:
我有一个返回接口的属性。在调试期间,我可以中断返回的内容,虽然它是接口,但 Visual Studio 足够聪明,可以知道它实际上是派生类型。我认为它正在使用反射或其他东西。我不知道。我的问题是,我是否可以在运行时获得相同的信息,以便我可以创建适当类型的变量并将接口转换为该类型?这就是我要说的:
IPreDisplay preDisplay = cb.PreDisplay;
如果 preDisplay 是 RedPreDisplay 我希望能够编码
RedPreDisplay tmp = preDisplay as RedPreDisplay;
或者如果 preDisplay 是 GreenPreDisplay...
GreenPreDisplay tmp = preDisplay as GreenPreDisplay;
等等... 如果可能的话,我想避免使用凌乱的 switch 语句,如果我可以使用泛型那就太好了。
如果您对我如何做到这一点有任何建议或示例,请分享。
【问题讨论】:
-
您为什么要这样做?当您想使用它时,当您对正确的类型进行强制转换时,返回接口的目的不是丢失了吗?
-
您的问题揭示了一些根本性的混乱,(或者您在语言上很草率)没有什么可以“返回”接口,因为接口在运行时不存在。它将某种具体类型的对象“CAST”返回到接口。但是强制转换不会改变对象,它只是改变了持有对对象的引用的变量的性质
-
@Charles Bretana:很遗憾你觉得有必要说明你刚刚做了什么;太多人不理解对象实例和它所针对的类型之间的区别。
-
我建议阅读 Liskov 替换原则:(所有派生类型都应该能够被视为基本类型):en.wikipedia.org/wiki/Liskov_substitution_principle
标签: c# .net interface casting polymorphism