[英]C# how to check if base class is instance of derived class
如何从基类中检查它是否是派生类的实例:
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
}
}
}
问题中的代码应该执行您想要的操作,但是,正如Danny Goodball在评论中所写的那样,这是非常糟糕的做法。
根据开放/关闭原则 ,声明“软件实体(类,模块,功能等)应打开以进行扩展,而关闭以进行修改”,
为不同的孩子处理不同动作的正确方法是使用覆盖:
使该方法成为虚拟方法(作为抽象方法可能更好),并使用其自己的实现在每个派生类中重写它:
class A
{
virtual void CheckDerived() { throw new NotImplementedException(); }
}
class A0 : A
{
void override CheckDerived() { Console.WriteLine("A0"); }
}
class A1 : A
{
void override CheckDerived() { Console.WriteLine("A1"); }
}
您应该使用类类型和IsAssignableFrom方法来执行此操作
public class Program
{
public static void Main()
{
A a = new A0();
a.CheckDerived();
}
}
class A0 : A {};
class A1 : A {};
class A2 : A {};
class A {
public void CheckDerived() {
if(this.GetType().IsAssignableFrom(typeof(A0))) Console.Write("A0");
if(this.GetType().IsAssignableFrom(typeof(A1))) Console.Write("A1");
if(this.GetType().IsAssignableFrom(typeof(A2))) Console.Write("A2");
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.