2011-03-07 3 views

Répondre

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."); 
} 

Vous pouvez également utiliser Type.FullName si vous voulez que le nom complet.

1

Je n'étais pas sûr de savoir ce que voulait dire votre question. Vous avez déjà obtenu quelques réponses vous montrant comment obtenir le type de base du type dérivé.

Type baseType = type.BaseType; 

Pour aller dans l'autre sens si vous avez une référence d'un type de base, vous pouvez utiliser GetType pour obtenir le type dynamique:

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

Si vous voulez juste le simple nom:

var name = typeof(DerivedType).BaseType.Name; 

Ou si vous voulez que l'assemblage nom qualifié:

var name = typeof(DerivedType).BaseType.AssemblyQualifiedName; 

Si vous voulez un code qui ne sera pas lancer une exception de référence null:

var type = typeof(DerivedType); 
var parentType = type.BaseType; 

if(parentType != null) 
{ 
    var name = parentType.Name; 
    var assemblyQualifiedName = parentType.AssemblyQualifiedName; 
} 
+0

C'est 'Type.BaseType' pas' Type.BaseClass'. – jason

2

BaseClassInstance.GetType().BaseType.FullName; devrait faire l'affaire

1

Une réflexion pourrait faire la magie:

var type = this.GetType(); 
while(type.BaseType != typeof(object)) 
{ 
    type = type.BaseType; 
} 
Console.WriteLine(type.Name); 
2

Vous pouvez l'obtenir comme ceci:

class BaseClass { } 
    class DerivedClass : BaseClass { } 

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

Merci. Je trouve que NUnit est très utile pour écrire un exemple de code, car avant de le publier, je peux vérifier qu'il fonctionne réellement. –

0
ChildClass cc = new ChildClass(); 
string baseNameClass = cc.GetType().BaseType.FullName; 
Questions connexes