C# 使用反射从Main调用泛型方法
我在玩弄反射。不确定以前是否有人提出过这种情况:C# 使用反射从Main调用泛型方法,c#,C#,我在玩弄反射。不确定以前是否有人提出过这种情况: static void Main(string[] args) { MethodInfo definition = typeof(SafeClass).GetMethod("Print"); MethodInfo constructed = definition.MakeGenericMethod(typeof(int)); constructed.Invoke(null, nul
static void Main(string[] args)
{
MethodInfo definition = typeof(SafeClass).GetMethod("Print");
MethodInfo constructed = definition.MakeGenericMethod(typeof(int));
constructed.Invoke(null, null);
Console.ReadLine();
}
public class SafeClass
{
public void Print<T>()
{
Console.WriteLine(typeof(T));
}
}
static void Main(字符串[]args)
{
MethodInfo definition=typeof(SafeClass).GetMethod(“打印”);
MethodInfo constructed=definition.MakeGenericMethod(typeof(int));
constructed.Invoke(null,null);
Console.ReadLine();
}
公共类安全类
{
公开作废印刷品()
{
控制台写入线(类型为(T));
}
}
我得到错误非静态方法需要一个目标。
如果我将
Print
方法设为静态,则调用将通过。但是,我不确定如何从内部静态方法调用此调用。您基本上在执行以下操作,但由于明显的原因,这些操作不起作用
null.Print<int>();
你基本上是在做下面的事情,这显然是行不通的
null.Print<int>();
Print()
是一个实例方法,而不是静态方法。它需要在某些东西上被调用
例如,代码是:
var sc = new SafeClass();
sc.Print<int>();
Print()
是一个实例方法,而不是静态方法。它需要在某些东西上被调用
例如,代码是:
var sc = new SafeClass();
sc.Print<int>();
它说它需要一些实例来完成对这个方法的调用。我也动态地创建了对象。因此,如果包含该方法,则可以运行任何对象
static void Main(string[] args)
{
object test= Activator.CreateInstance(typeof(SafeClass));
MethodInfo definition = typeof(SafeClass).GetMethod("Print");
MethodInfo constructed = definition.MakeGenericMethod(typeof(int));
constructed.Invoke(test, null);
Console.ReadLine();
}
它说它需要一些实例来完成对这个方法的调用。我也动态地创建了对象。因此,如果包含该方法,则可以运行任何对象
static void Main(string[] args)
{
object test= Activator.CreateInstance(typeof(SafeClass));
MethodInfo definition = typeof(SafeClass).GetMethod("Print");
MethodInfo constructed = definition.MakeGenericMethod(typeof(int));
constructed.Invoke(test, null);
Console.ReadLine();
}
如果方法是实例方法或构造函数,则Invoke的第一个参数应该是实例本身 这是因为当调用实例方法或构造函数时,clr将隐式地将实例作为第一个参数传递给函数,以便您可以在方法中使用
this
在python等其他语言中,此参数由程序员显式传递如果方法是实例方法或构造函数,则Invoke的第一个参数应该是它自己的实例 这是因为当调用实例方法或构造函数时,clr将隐式地将实例作为第一个参数传递给函数,以便您可以在方法中使用
this
在python等其他语言中,此参数由程序员显式传递