繁体   English   中英

如何从C#的派生类中获取基类的名称

[英]How to get the name of the base class from a derived class in 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

如果只想要简单的名称:

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;
}

BaseClassInstance.GetType().BaseType.FullName; 应该做到的

您可以这样获得:

    class BaseClass { }
    class DerivedClass : BaseClass { }

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

我不确定您的问题是什么意思。 您已经获得了一些答案,向您展示了如何从派生类型中获取基本类型。

Type baseType = type.BaseType;

如果您具有基本类型的引用,则可以采用另一种方法,可以使用GetType获取动态类型:

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

一些思考可能会产生魔力:

var type = this.GetType();
while(type.BaseType != typeof(object))
{
    type = type.BaseType;
}
Console.WriteLine(type.Name);
ChildClass cc = new ChildClass();
string baseNameClass = cc.GetType().BaseType.FullName;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM