Maison >développement back-end >C++ >Comment puis-je vérifier si un type est un sous-type ou identique à un autre type en C# sans opérateurs booléens ni méthodes d'extension ?

Comment puis-je vérifier si un type est un sous-type ou identique à un autre type en C# sans opérateurs booléens ni méthodes d'extension ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-09 15:11:46320parcourir

How Can I Check if a Type is a Subtype or Identical to Another Type in C# Without Boolean Operators or Extension Methods?

Comment savoir si un type est un sous-type ou le même type d'un autre type en C# sans utiliser d'opérateurs booléens ou de méthodes d'extension ?

La méthode

Type.IsSubclassOf en C# peut vérifier efficacement si un type est une sous-classe d'un autre type. Cependant, lorsque les types sont exactement les mêmes, il renvoie false. Cela peut créer des défis lorsque l'on tente de déterminer si un type est une sous-classe ou identique à la classe de base elle-même.

Plusieurs méthodes et leurs limites

Plusieurs méthodes existent, mais chaque méthode a ses limites :

  1. Type.IsSubclassOf :

    • Fonctionne pour vérifier les sous-classes, mais échoue si les types sont les mêmes.
  2. Type.IsAssignableFrom :

    • peut répondre à la question, mais peut également donner des faux positifs indiquant qu'un héritage ou une identité de type existe alors qu'il n'en existe pas réellement.
  3. Opérateurs « est » et « comme » :

    • Nécessite une référence d'objet et ne peut pas opérer directement sur des objets de type.

Conclusion

Malheureusement, il n'existe aucun moyen de fournir une solution soignée sans vérifications supplémentaires. Pour obtenir la réponse complète, le code suivant est requis :

<code class="language-csharp">typeof(Derived).IsSubclassOf(typeof(Base)) || typeof(Derived) == typeof(Base);</code>

Ou, écrit de manière plus concise sous forme de méthode :

<code class="language-csharp">public bool IsSameOrSubclass(Type potentialBase, Type potentialDescendant)
{
    return potentialDescendant.IsSubclassOf(potentialBase) || potentialDescendant == potentialBase;
}</code>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn