首頁 >後端開發 >C++ >如何使用運行時確定的類型參數呼叫泛型方法?

如何使用運行時確定的類型參數呼叫泛型方法?

Linda Hamilton
Linda Hamilton原創
2024-12-30 15:36:09735瀏覽

How to Call a Generic Method with a Runtime-Determined Type Argument?

使用僅在執行時已知的類型參數呼叫泛型方法

問題:動態呼叫泛型方法

您想要呼叫泛型方法直到運行時才知道的類型參數。例如,您有一個介面列表,並且您想要為每個介面呼叫一個泛型方法。

解決方案:基於反射的動態呼叫

因為編譯時不知道類型參數有時,您不能將傳統方法呼叫與泛型一起使用。相反,您需要使用反射根據執行時間取得的類型參數動態呼叫泛型方法。

以下是實作此方法的方法:

  1. 取得泛型方法: 使用 Type.GetMethod 擷取泛型方法。
  2. 建構泛型型別參數: 使用 Type.GetTypeArguments 來識別泛型型別參數。然後,建立一個代表要使用的實際類型參數的 Type 物件。
  3. 建立泛型方法實例: 在泛型方法上使用MakeGenericMethod 來建立具有給定型別的特定實例argument.
  4. 呼叫泛型方法: 最後,對建立的泛型方法實例使用Invoke來呼叫它

程式碼範例

// Original Method
public void Method<T>() {
    // Method body
}

// Main Method
var assembly = Assembly.GetExecutingAssembly();
var interfaces = assembly.GetTypes().Where(t => t.Namespace == "MyNamespace.Interfaces");

foreach (var interfaceType in interfaces) {
    MethodInfo genericMethod = typeof(Test).GetMethod("Method");
    MethodInfo specificMethod = genericMethod.MakeGenericMethod(interfaceType);
    specificMethod.Invoke(null, null); // No arguments for this example
}

透過利用反射,此方法可讓您在執行時間動態呼叫具有未知型別參數的泛型方法。

以上是如何使用運行時確定的類型參數呼叫泛型方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn