Ima*_*sco 3 c# polymorphism inheritance
如何从基类内部检查它是否是派生类的实例:
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
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题中的代码应该可以满足您的要求,但是,正如 Danny Goodball 在他的评论中所写的那样,这是一种非常糟糕的做法。
根据打开/关闭原则,“软件实体(类、模块、函数等)应该对扩展开放,对修改关闭”,
针对不同子级处理不同动作的正确方法是使用覆盖:
使方法虚拟(作为抽象方法可能更好),并在每个派生类中用它自己的实现覆盖它:
class A
{
virtual void CheckDerived() { throw new NotImplementedException(); }
}
class A0 : A
{
override void CheckDerived() { Console.WriteLine("A0"); }
}
class A1 : A
{
override void CheckDerived() { Console.WriteLine("A1"); }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3165 次 |
| 最近记录: |