如何从C派生类中获取基类的名称
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
。
我不确定你的问题意味着什么。您已经得到了一些答案,向您展示了如何从派生类型中获取基类型。
Type baseType = type.BaseType;
为了走另外一条路,如果你有一个基本类型的参考,你可以使用的GetType来获取动态类型:
BaseClass foo = ....;
Type type = foo.GetType();
如果你只是想简单的名字:
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;
}
它的'Type.BaseType'不是'Type.BaseClass'。 – jason 2011-03-07 21:11:49
BaseClassInstance.GetType().BaseType.FullName;
应该做的伎俩
一些反射可能会做的魔力:
var type = this.GetType();
while(type.BaseType != typeof(object))
{
type = type.BaseType;
}
Console.WriteLine(type.Name);
你可以得到它像这样:
class BaseClass { }
class DerivedClass : BaseClass { }
[Test]
public void TestBaseName()
{
var a = new DerivedClass();
Assert.AreEqual(a.GetType().BaseType.Name, "BaseClass");
}
谢谢。编写示例代码时,我发现NUnit可以大大提供帮助,因为在发布之前,我可以验证它实际上是否有效。 – 2011-03-07 21:31:10
ChildClass cc = new ChildClass();
string baseNameClass = cc.GetType().BaseType.FullName;
也许我误解了它,但你的问题和标题似乎相互矛盾。 – 2011-03-07 20:57:51
如果我的问题不清楚,我很抱歉,但我有我正在寻找的答案。无论如何感谢 – 2011-03-07 22:49:18