当前位置:  开发笔记 > 编程语言 > 正文

检查课程的最佳方式

如何解决《检查课程的最佳方式》经验,为你挑选了2个好方法。

我有一个方法,它接受一个接口对象的参数

像这样

private void SomeMethod(InterfaceA IUA)

在方法内部我有这样的声明

ClassD someVar = (ClassD)(((ClassC)((ClassB)IUA)).D);

一切都很精致和花花公子.但是,在某些情况下,对象IUA可能是ClassZ的实例而不是ClassB.所以在这种情况下上面的行错误了.在执行上述语句之前,有没有办法找出对象真正属于哪个类?如果我事先知道那么我可以有一个If语句并执行以下操作

ClassZ someVar = (ClassD)(((ClassC)((ClassZ)IUA)).Z);

我来自java背景...在java中我知道我们有getClass()...在.net中会有什么相同的东西?



1> Roger Lipsco..:

真的不应该没有充分理由编写这样的代码.

那说:你可以使用 is

if (a is ClassB)
{
    ClassB b = (ClassB)a;
}
else if (a is ClassZ)
{
    ClassZ z = (ClassZ)a;
}

......或者as:

ClassB b = a as ClassB;
if (b != null)
{
    // ...
}



2> Vojislav Sto..:

嗯,首先,你是不是真的应该从接口垂头丧气的一类,除非你有一个真正好的理由这样做.如果您需要ClassD功能,那么您的方法应该接收ClassD,而不是InterfaceA.

令我困惑的另一件事是多次向下倾斜.我同时使用Java和C#,我从未见过需要像这样进行多重演员.

最后,您可以使用运算符"is"来确定某些类型是从某个类继承还是实现某个接口,如

if (IUA is ClassD)
{
    // do something
}

推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有