在c#运行时确定的泛型类型上调用非泛型方法
本文关键字:调用 泛型方法 泛型类型 运行时 | 更新日期: 2023-09-27 18:02:10
我想在泛型类型上调用非泛型方法。这是因为我知道类型T在运行时肯定会有这个方法。c#不允许这样做,所以我查找了解决方案,但我没有找到一个解决这个问题的。
1)我尝试使用动态类型,但遇到了一个问题,我仍然没有找到答案:一个或多个类型需要编译一个动态表达式c#
2)我尝试定义一个接口,我定义了在generic_method中实例化的委托。这不起作用,因为在generic_method中,我无法访问委托,即使我将其传递给函数。
private interface MessageMethods
{
public delegate void MethodDelegate(DirectBuffer buffer, int offset, int actingBlockLength, int actingVersion);
}
private static T generic_method<T>(byte[] pinned_memory, ref int offset) where T: MessageMethods
{
MethodDelegate m = new MethodDelegate(someFunctionSomewhereElse());
// Visual studio does not recognize what MethodDelegate is, so this does not work.
// someFunctionSomewhereElse() is NOT generic
}
我已经看过使用反射的问题,但这是我第一次处理这种程度的泛型类型,不幸的是,我很难理解如何在c#中使用反射。我还能尝试什么?
这是不完全清楚的格式的代码,但我认为这是你的问题:
MethodDelegate是一个私有接口MessageMethods中的委托。
你应该把你的接口设为公共的,并在generic_method中使用以下语法:
private static T generic_method<T>(byte[] pinned_memory, ref int offset) where T : MessageMethods
{
MessageMethods.MethodDelegate m = new MessageMethods.MethodDelegate(someFunctionSomewhereElse); // also, don't use the extra (), because you probably don't want to call the method yet.
}