【发布时间】:2018-07-05 14:41:08
【问题描述】:
如何从基类中检查它是否是派生类的实例:
class A0 : A {};
class A1 : A {};
class A2 : A {};
class A
{
void CheckDerived()
{
if (this is A0)
{
//Do something when instance is A0
}
else if (this is A1)
{
//Do something when instance is A1
}
else if (this is A2)
{
//Do something when instance is A2
}
}
}
【问题讨论】:
-
这是非常糟糕的做法仅供参考,最好有一个所有派生类都覆盖的虚拟方法。
-
基类永远不应该知道它的派生类。如果没有这样的孩子,你会怎么做?
-
将方法设为虚拟并覆盖它。任何有类型检查块的地方都是代码异味。
-
为什么需要这个?你的实际目标是什么?也许有更好的方法来实现这一点。
-
“所以我正在尝试这样的方法来避免对每个派生类进行覆盖” - 为什么?这正是覆盖派上用场的地方!
标签: c# inheritance polymorphism