2011-03-07 163 views
0

我想使用反射從派生類中獲取基類的名稱。如何從C派生類中獲取基類的名稱

+1

也許我誤解了它,但你的問題和標題似乎相互矛盾。 – 2011-03-07 20:57:51

+0

如果我的問題不清楚,我很抱歉,但我有我正在尋找的答案。無論如何感謝 – 2011-03-07 22:49:18

回答

6
Type type = typeof(Derived); 
Type baseType = type.BaseType; 
if(baseType != null) { 
    string baseTypeName = baseType.Name; 
    Console.WriteLine(baseTypeName); 
} 
else { 
    Console.WriteLine("No base type."); 
} 

另外,如果你想完全合格的名稱,你可以使用Type.FullName

1

我不確定你的問題意味着什麼。您已經得到了一些答案,向您展示瞭如何從派生類型中獲取基類型。

Type baseType = type.BaseType; 

爲了走另外一條路,如果你有一個基本類型的參考,你可以使用的GetType來獲取動態類型:

BaseClass foo = ....; 
Type type = foo.GetType(); 
2

如果你只是想簡單的名字:

var name = typeof(DerivedType).BaseType.Name; 

或者,如果你想要的裝配合格的名稱:

var name = typeof(DerivedType).BaseType.AssemblyQualifiedName; 

如果你想要的代碼不會拋出一個空引用異常:

var type = typeof(DerivedType); 
var parentType = type.BaseType; 

if(parentType != null) 
{ 
    var name = parentType.Name; 
    var assemblyQualifiedName = parentType.AssemblyQualifiedName; 
} 
+0

它的'Type.BaseType'不是'Type.BaseClass'。 – jason 2011-03-07 21:11:49

2

BaseClassInstance.GetType().BaseType.FullName;應該做的伎倆

1

一些反射可能會做的魔力:

var type = this.GetType(); 
while(type.BaseType != typeof(object)) 
{ 
    type = type.BaseType; 
} 
Console.WriteLine(type.Name); 
2

你可以得到它像這樣:

class BaseClass { } 
    class DerivedClass : BaseClass { } 

    [Test] 
    public void TestBaseName() 
    { 
     var a = new DerivedClass(); 
     Assert.AreEqual(a.GetType().BaseType.Name, "BaseClass"); 
    } 
+0

謝謝。編寫示例代碼時,我發現NUnit可以大大提供幫助,因爲在發佈之前,我可以驗證它實際上是否有效。 – 2011-03-07 21:31:10

0
ChildClass cc = new ChildClass(); 
string baseNameClass = cc.GetType().BaseType.FullName;