2011-03-07 165 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;