2012-07-06 33 views
0

有沒有一種方法可以獲得像這樣的代碼print「Test」;評估一個控件在運行時是否屬於父類型

DecendedTextBox myControl = new DecendedTextbox(); 

if (myControl is "TextBox") 
{ 
    Debug.WriteLine("Test"); 
} 

這裏的問題是,我需要看看myControl是否繼承了我在編譯時沒有引用的類型。如果你想知道完整的類型名稱,包括命名空間

DecendedTextBox myControl = new DecendedTextbox(); 

if (myControl.GetType().Name == "TextBox") 
{ 
    Debug.WriteLine("Test"); 
} 

,您可以使用GetType().FullName

由於:

回答

1

如果您還沒有該類型的引用,你可以這樣做據檢查,看它是否從類型繼承,像這樣:

DecendedTextBox myControl = new DecendedTextbox(); 
Type typeToCheck = Type.GetType("TextBox"); 
if (myControl.GetType().IsSubclassOf(typeToCheck)) 
{ 
    Debug.WriteLine("Test"); 
} 

注意Type.GetType需要一個AssemblyQualifiedName,所以you'l我需要知道完整的類型名稱。

+0

但是,這不會是真的。 myControl.GetType()。Name返回「DecendedTextbox」。 – Vaccano 2012-07-06 19:29:37

+0

結帳我的編輯。 – rossipedia 2012-07-06 19:31:14

+0

謝謝你的回答!這正是我需要的! – Vaccano 2012-07-06 19:47:03

1

如果你需要避免拉扯Type參考了通過反射,那麼你可以爬上繼承樹:

public static bool IsTypeSubclassOf(Type subclass, string baseClassFullName) 
{ 
    while (subclass != typeof(object)) 
    { 
     if (subclass.FullName == baseClassFullName) 
      return true; 
     else 
      subclass = subclass.BaseType; 
    } 
    return false; 
} 
相關問題