在运行时确定的泛型类型上调用非泛型方法c#

时间:2015-07-09 20:34:07

标签: c# generics

我想在泛型类型上调用非泛型方法。这是因为我知道运行时类型T肯定会有所说的方法。 c#不允许这样,所以我查找了解决方案,但我发现没有解决这个问题。

1)我尝试使用动态类型,但遇到了一个我仍未找到答案的问题:one or more types required to compile a dynamic expression 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#中使用反射。我还能尝试什么?

1 个答案:

答案 0 :(得分:0)

代码的格式化并不完全清楚,但我认为这是你的问题:

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.
}