43

在 C# 中,如何获得对给定类的基类的引用?

例如,假设您有某个类 ,MyClass并且您想获得对MyClass' 超类的引用。

我想到了这样的事情:

Type  superClass = MyClass.GetBase() ;
// then, do something with superClass

但是,似乎没有合适的GetBase方法。

4

7 回答 7

60

使用当前类的类型中的反射。

 Type superClass = myClass.GetType().BaseType;
于 2009-07-09T17:14:41.693 回答
22
Type superClass = typeof(MyClass).BaseType;

此外,如果您不知道当前对象的类型,您可以使用 GetType 获取类型,然后获取该类型的 BaseType:

Type baseClass = myObject.GetType().BaseType;

文件

于 2009-07-09T17:13:50.840 回答
5

这将获取基本类型(如果存在)并创建它的实例:

Type baseType = typeof(MyClass).BaseType;
object o = null;
if(baseType != null) {
    o = Activator.CreateInstance(baseType);
}

或者,如果您在编译时不知道类型,请使用以下内容:

object myObject;
Type baseType = myObject.GetType().BaseType;
object o = null;
if(baseType != null) {
    o = Activator.CreateInstance(baseType);
}

请参阅MSDN 上的Type.BaseType和。Activator.CreateInstance

于 2009-07-09T17:15:11.630 回答
2

Type.BaseType属性是您正在寻找的。

Type  superClass = typeof(MyClass).BaseType;
于 2009-07-09T17:14:06.830 回答
2

obj.base将从派生对象obj的实例中获取对父对象的引用。

typeof(obj).BaseType将从派生对象obj的实例中获取对父对象类型的引用。

于 2009-07-09T17:16:32.580 回答
1

如果你想检查一个类是否是另一个类的子类,你可以使用is

if (variable is superclass){ //do stuff }

文档:https ://msdn.microsoft.com/en-us/library/scekt9xw.aspx

于 2015-09-22T10:12:44.037 回答
-1

你可以只使用基地。

于 2009-07-09T17:15:07.577 回答