调用类型参数的方法
有没有办法做这样的代码:
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 : SomeTypeOrInterface
, SomeTypeOrInterface
定义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类型参数上调用静态方法