Heim >Backend-Entwicklung >C++ >Wie wählt man generische Methoden mit Reflexion zur Kompilierungszeit genau aus?
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>
oder die zweite Überladung, die zwei generische Parameter hat:
<code class="language-C#">var method = new Action<object, object>(MyClass.DoSomething<object, object>);</code>
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>
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>
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>
Entkopplungsmethodenauswahl und Parametertypen
Wenn die generischen Typparameter erst später ermittelt werden:
<code class="language-C#">var methodInfo = method.Method.GetGenericMethodDefinition();</code>
Übergeben Sie später den gewünschten Typ an MakeGenericMethod()
:
<code class="language-C#">methodInfo.MakeGenericMethod(type1, type2);</code>
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!