我想在泛型类型上调用非泛型方法。这是因为我知道运行时类型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#中使用反射。我还能尝试什么?
答案 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.
}