2009-02-03 20 views
4

En C# comment pouvez-vous trouver si un objet est une instance de certaines classes mais pas des super-classes de cette classe? "Is" retournera vrai même si l'objet provient réellement d'une superclasseComment trouver si un objet appartient à une classe mais pas à une super-classe?

+1

Ali, vous vouliez poser des questions sur les sous-classes, pas de superclasses. Si D descend de B, alors D est une sous-classe et B est la superclasse de D. –

+0

@RobKennedy Ce qui n'a aucun sens si vous voyez la signification sémantique de sub/super comme sous-ensemble/sur-ensemble. Je suppose que c'est notre petite blague interne en tant que programmeurs. – Alex

+0

En fait, @Alex, cela rend * parfait * le sens. Un type est simplement l'ensemble de toutes les valeurs qui ont ce type. Toute valeur de type 'D' est donc membre de l'ensemble ** D ** ainsi que de l'ensemble ** B **, mais il y a des membres de l'ensemble ** B ** qui ne sont pas membres de ** RÉ**. Le type ** D ** est donc un sous-ensemble de ** B **. Nous exprimons cela avec la notation 'D <: B'. Consultez [* Types et langages de programmation * par Benjamin C. Pierce] (http://www.cis.upenn.edu/~bcpierce/tapl/index.html). –

Répondre

13
typeof(SpecifiedClass) == obj.GetType() 
+0

-1 Cela ne répond pas à la question: il n'est pas possible qu'un type hérite d'un autre sans hériter de tous les autres types de la chaîne d'héritage. –

+1

Cette réponse fonctionne, et assez drôle, cela fonctionne pour toutes les versions de question (vérifier l'histoire) - à la fois pour "superclasse" et "sous-classe". –

2

Malheureusement, cela n'est pas possible en C# car C# ne supporte pas l'héritage multiple. Donnez cet arbre d'héritage:

GrandParent 
    Parent 
    Child 

Le Child aura toujours une instance de chaque type ci-dessus dans la chaîne d'héritage.

+0

Après avoir regardé votre réponse pendant quelques minutes, je pense que je sais ce que vous voulez dire. Je pense. – Tundey

1

Vous voudrez peut-être regarder quelques méthodes de la classe Type: Type.IsInstaceOf et Type.IsSubclassOf

Vous pouvez passer dans la classe que vous cherchez et obtenir la informations dont vous avez besoin.

+0

C'est à ce moment que vous voulez comparer deux objets entre eux. Mon cas est de comparer un objet avec une classe. – Ali

+0

Il est vrai que ce sont des types, mais vous pouvez obtenir la classe Type pour un objet avec obj.GetType. Exemple:.. obj.GetType() IsSubclassOf (typeof (ClassYouAreLookingFor)) ou obj.GetType() isInstanceOf (typeof (ClassYouAreLookingFor)) devrait accomplir ce que vous cherchez. – CubanX

3

Vous pouvez comparer le type de l'objet au type de la classe que vous recherchez:

class A { } 
class B : A { } 

A a = new A(); 
if(a.GetType() == typeof(A)) // returns true 
{ 
} 

A b = new B(); 
if(b.GetType() == typeof(A)) // returns false 
{ 
} 
0
if(Obj.GetType() == typeof(ClassName)) 

Cela a fonctionné pour moi

Questions connexes