我有一个返回接口的属性。在调试过程中,我可以中断返回的内容,虽然它是接口,但 Visual Studio 足够聪明,可以知道它实际上是什么派生类型。我认为它正在使用反射或其他东西。我不知道。我的问题是,我可以在运行时获得相同的信息,以便我可以创建适当类型的变量并将接口转换为该变量吗?这就是我要说的:
IPreDisplay preDisplay = cb.PreDisplay;
如果 preDisplay 是 RedPreDisplay 我希望能够编码
RedPreDisplay tmp = preDisplay as RedPreDisplay;
或者如果 preDisplay 是 GreenPreDisplay...
GreenPreDisplay tmp = preDisplay as GreenPreDisplay;
ETC...
如果可能的话,我想避免使用混乱的 switch 语句,如果我可以使用泛型,那就太好了。
如果您对我如何做到这一点有任何建议或示例,请分享。
当你遇到需要这样做的情况时,就意味着你做错了什么。您需要备份并弄清楚为什么您的设计要求您这样做。如果您发现自己陷入困境,我强烈建议您发布一个新问题来获得设计方面的帮助 - 这里有很多聪明的人可以提供帮助。
要直接回答你的问题,不 - 如果没有某种 if/else 或条件,你就无法做到这一点,因为你必须明确使用静态类型。您可以使用反射来调用该方法,但由于您似乎需要调用接口不支持的内容(但某些对象支持),因此您无论如何都需要编写每个静态类型的条件来调用该方法。只需直接编码类型即可。
Edit:根据评论中的讨论,最好的解决方案是向具有其他属性或方法的类添加第二个接口。然后你可以做一个简单的检查:
IPreDisplay display = cb.PreDisplay;
IOtherInterface displayAsOther = display as IOtherInterface;
if(displayAsOther != null)
{
displayAsOther.OtherMethod();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)