web-dev-qa-db-fra.com

C #: comment obtenir une classe de base d'une classe?

En C #, comment obtenir une référence à la classe de base d'une classe donnée?

Par exemple, supposons que vous ayez une certaine classe, MyClass, et que vous souhaitiez obtenir une référence à la superclasse MyClass '.

Je pense à quelque chose comme ça:

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

Cependant, il semble qu'il n'y ait pas de méthode GetBase appropriée.

37
JaysonFix

Utilisez la réflexion du type de la classe actuelle.

 Type superClass = myClass.GetType().BaseType;
53
JoshJordan
Type superClass = typeof(MyClass).BaseType;

En outre, si vous ne connaissez pas le type de votre objet actuel, vous pouvez obtenir le type à l'aide de GetType, puis obtenir le BaseType de ce type:

Type baseClass = myObject.GetType().BaseType;

documentation

21
Timothy Carter

Cela obtiendra le type de base (s'il existe) et en créera une instance:

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

Sinon, si vous ne connaissez pas le type au moment de la compilation, utilisez ce qui suit:

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

Voir Type.BaseType et Activator.CreateInstance sur MSDN.

5
jason

La propriété Type.BaseType est ce que vous recherchez.

Type  superClass = typeof(MyClass).BaseType;
2
heavyd

obj.base vous obtiendrez une référence à l'objet parent à partir d'une instance de l'objet dérivé obj .

typeof (obj) .BaseType vous donnera une référence au type de l'objet parent à partir d'une instance de l'objet dérivé obj .

2
meklarian

si vous voulez vérifier si une classe est une sous-classe d'une autre, vous pouvez utiliser est .

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

Documents: https://msdn.Microsoft.com/en-us/library/scekt9xw.aspx

1
VeYroN