Heim > Backend-Entwicklung > C++ > Wie wählt man generische Methoden mit Reflexion zur Kompilierungszeit genau aus?

Wie wählt man generische Methoden mit Reflexion zur Kompilierungszeit genau aus?

Patricia Arquette
Freigeben: 2025-01-11 13:37:43
Original
963 Leute haben es durchsucht

How to Accurately Select Generic Methods with Reflection at Compile Time?

Verwenden Sie Reflexion, um generische Methoden auszuwählen

Reflection ermöglicht das Aufrufen von Methoden mit bestimmten generischen Typparametern. Wenn jedoch mehrere generische Überladungen vorhanden sind, kann die Auswahl der geeigneten Methode eine Herausforderung sein. Dieser Artikel demonstriert einen Ansatz zur Kompilierungszeit zur präzisen Auswahl einer generischen Zielmethode durch Bearbeiten von Delegaten- und Methodeninformationsobjekten.

Verwenden Sie die Delegate-Auswahlmethode

Bei statischen Methoden ermöglicht das Erstellen eines Delegaten mit der erforderlichen Anzahl von Generika und Parametern die Auswahl spezifischer Überladungen. Um beispielsweise die erste Überladung von DoSomething<TModel> auszuwählen, verfügt sie nur über einen generischen Parameter:

<code class="language-C#">var method = new Action<object>(MyClass.DoSomething<object>);</code>
Nach dem Login kopieren

oder die zweite Überladung, die zwei generische Parameter hat:

<code class="language-C#">var method = new Action<object, object>(MyClass.DoSomething<object, object>);</code>
Nach dem Login kopieren

Folgen Sie für statische Erweiterungsmethoden einem ähnlichen Muster und verwenden Sie die entsprechenden Typen, um die this-Parameter zu verarbeiten:

<code class="language-C#">var method = new Func<IQueryable<object>, Expression<Func<bool>>, IQueryable<object>>(Queryable.Where<object>);</code>
Nach dem Login kopieren

Methodeninformationen abrufen

Die

-Eigenschaft des Method-Delegaten stellt das zugrunde liegende MethodInfo-Objekt bereit. So erhalten Sie eine generische Methodendefinition und stellen spezifische Typparameter bereit:

<code class="language-C#">var methodInfo = method.Method.MakeGenericMethod(type1, type2);</code>
Nach dem Login kopieren

Instanzmethoden

Um eine Instanzmethode auszuwählen, ist der Vorgang ähnlich:

<code class="language-C#">var method = new Action<object>(instance.MyMethod<object>);
var methodInfo = method.Method.GetGenericMethodDefinition().MakeGenericMethod(type1);</code>
Nach dem Login kopieren

Entkopplungsmethodenauswahl und Parametertypen

Wenn die generischen Typparameter erst später ermittelt werden:

<code class="language-C#">var methodInfo = method.Method.GetGenericMethodDefinition();</code>
Nach dem Login kopieren

Übergeben Sie später den gewünschten Typ an MakeGenericMethod():

<code class="language-C#">methodInfo.MakeGenericMethod(type1, type2);</code>
Nach dem Login kopieren

Fazit

Dieser Ansatz ermöglicht eine präzise Auswahl generischer Methoden zur Kompilierungszeit und vermeidet fehleranfällige Laufzeitsuchen oder die Verwendung von Zeichenfolgen. Es bietet einen robusten und flexiblen Mechanismus zum Aufrufen generischer Methoden mit verschiedenen Typparametern.

Das obige ist der detaillierte Inhalt vonWie wählt man generische Methoden mit Reflexion zur Kompilierungszeit genau aus?. 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