簡體   English   中英

C#如何檢查基類是否為派生類的實例

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM