Maison >développement back-end >C++ >Comment puis-je rechercher efficacement tous les types dérivés d'un type de base en C# ?

Comment puis-je rechercher efficacement tous les types dérivés d'un type de base en C# ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-01 09:53:11571parcourir

How Can I Efficiently Find All Derived Types of a Base Type in C#?

Recherche de tous les types dérivés d'un type

En programmation, il est souvent nécessaire d'identifier tous les types qui héritent d'un type de base spécifique. Actuellement, une approche courante consiste à parcourir tous les types dans les assemblys chargés et à vérifier s'ils sont attribuables au type de base.

Cependant, une méthode plus efficace et plus propre consiste à utiliser une requête LINQ pour récupérer tous les types dérivés. types :

var listOfDerivedTypes = (
    from domainAssembly in AppDomain.CurrentDomain.GetAssemblies()
    from type in domainAssembly.GetTypes()
    where typeof(BaseType).IsAssignableFrom(type)
    select type).ToArray();

Cette requête recherche tous les types dans les assemblys chargés dans l'AppDomain actuel et filtre les types qui peuvent être attribués au type de base, renvoyant effectivement une liste de types dérivés.

Version fluide et détails :

Le code peut être exprimé dans un style plus fluide :

var listOfDerivedTypes = AppDomain.CurrentDomain.GetAssemblies()
    .SelectMany(domainAssembly => domainAssembly.GetTypes())
    .Where(type => typeof(BaseType).IsAssignableFrom(type))
    .ToArray();

Considérations supplémentaires :

  • La réflexion est utilisée dans ce processus, donc la répétition peut avoir un impact performance. Pensez à utiliser le chargement différé.
  • Limiter la recherche aux types publics peut améliorer l'efficacité en utilisant domainAssembly.GetExportedTypes().
  • Les résultats incluront le type de base lui-même, sauf s'il est explicitement exclu à l'aide de && type != typeof(BaseType).
  • Pour exclure les classes abstraites, utilisez && !type.IsAbstract.
  • La gestion des génériques nécessite une logique plus complexe. Consultez les ressources fournies dans la réponse pour obtenir des conseils.

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