Heim > Backend-Entwicklung > C++ > Wie kann ich alle abgeleiteten Typen eines Basistyps in C# effizient finden?

Wie kann ich alle abgeleiteten Typen eines Basistyps in C# effizient finden?

Linda Hamilton
Freigeben: 2025-01-01 09:53:11
Original
562 Leute haben es durchsucht

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

Alle abgeleiteten Typen eines Typs finden

Bei der Programmierung ist es oft notwendig, alle Typen zu identifizieren, die von einem bestimmten Basistyp erben. Derzeit besteht ein gängiger Ansatz darin, alle Typen in den geladenen Assemblys zu durchlaufen und zu prüfen, ob sie dem Basistyp zuweisbar sind.

Eine effizientere und sauberere Methode besteht jedoch darin, eine LINQ-Abfrage zu verwenden, um alle abgeleiteten Typen abzurufen Typen:

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

Diese Abfrage sucht nach allen Typen innerhalb der in die aktuelle AppDomain geladenen Assemblys und filtert nach Typen, die dem Basistyp zugewiesen werden können, wodurch effektiv eine Liste abgeleiteter Typen zurückgegeben wird Typen.

Fließende Version und Details:

Der Code kann in einem flüssigeren Stil ausgedrückt werden:

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

Zusätzliche Überlegungen :

  • Reflexion wird in diesem Prozess verwendet, sodass Wiederholungen die Leistung beeinträchtigen können. Erwägen Sie die Verwendung von Lazy Loading.
  • Die Beschränkung der Suche auf öffentliche Typen kann durch die Verwendung von domainAssembly.GetExportedTypes() die Effizienz steigern.
  • Die Ergebnisse enthalten den Basistyp selbst, sofern er nicht explizit mit && type != ausgeschlossen wird typeof(BaseType).
  • Um abstrakte Klassen auszuschließen, verwenden Sie && !type.IsAbstract.
  • Der Umgang mit Generika erfordert eine komplexere Logik. Weitere Informationen finden Sie in den in der Antwort bereitgestellten Ressourcen.

Das obige ist der detaillierte Inhalt vonWie kann ich alle abgeleiteten Typen eines Basistyps in C# effizient finden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage