2015-07-09 174 views
0

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

1)我试图使用动态类型,但跑进到我还没有找到一个答案的问题:one or more types required to compile a dynamic expression c#

2)我试图限定在其中予定义的我在generic_method实例代表一个接口。这是行不通的,因为在generic_method中我无法访问委托,即使我将它传递给函数。

​​3210

我看过使用反射的问题,但这是我第一次处理泛型类型,以这种程度,不幸的是,我有困难的时候了解如何在C#中使用反射。我还能尝试什么?

+0

哪里'generic_method '生活?它是一些较大的班级的一部分,是吗? – kaveman

+0

是的,它是一个更大的类的一部分 –

+1

你需要提供更多的可编译样本(可能有5行会得到它)...到目前为止似乎没有任何关系到泛型 - “新的MessageMethods.MethodDelegate(someFunctionSomewhereElse)'应该解决你目前的问题。 –

回答

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

我没有这样做的问题,但为了我自己的理解,我为什么不能让MessageMethods保密?我认为私人仍然意味着同一个班级的成员可以访问它。 –

+0

'MessageMethods'中的'generic_method'? – Marnix

+0

没有generic_method和MessageMethods是同一类的一部分。我明白,因为generic_method是静态的,它实际上并不与类的实例相关联,而非静态接口与类相关联,但是接下来generic_method如何找到接口? –