首页 >后端开发 >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