调用类型参数的方法

有没有办法做这样的代码:

class GenericClass { void functionA() { TA(); } } 

或者,如何调用类型参数的函数(类型是我的自定义类)。

要调用generics类型对象的方法,必须先将其实例化。

 public static void RunSnippet() { var c = new GenericClass(); } public class GenericClass where T : SomeType, new() { public GenericClass(){ (new T()).functionA(); } } public class SomeType { public void functionA() { //do something here Console.WriteLine("I wrote this"); } } 

回覆:

TA();

如果这是你的意思,你不能调用type-parameter的静态方法。 你最好将它重构为T的实例方法,可能使用generics约束( where T : SomeTypeOrInterfaceSomeTypeOrInterface定义A() )。 另一种选择是dynamic ,它允许对实例方法进行鸭子输入(通过签名)。

如果你的意思是T只在运行时知道(作为一个Type ),那么你需要:

 typeof(GenericClass<>).MakeGenericType(type).GetMethod(...).Invoke(...); 

我认为您正在寻找generics类型约束 :

 class GenericClass where T : MyBaseClass { void functionA(T something) { something.A(); } } 

就你发布的代码而言 – 为了在T上调用某些东西,你需要将它作为参数传递给functionA 。 您使用的约束必须确保任何T都有一个可以使用的A方法。

我从你的代码中了解到你想要调用一个类型参数静态方法,这是不可能的。

有关详细信息,请参阅此处: 在generics类型参数上调用静态方法