1、Type类,方法用Invoke调用的时候就 使用null:表示该方法是无参数的
2、Type类,方法用Invoke调用的时候就 使用new object[] { "肖名" }传递参数:表示该方法是有参数的
代码语言:javascript复制using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace 动态调用类中的方法
{
class Program
{
static void Main(string[] args)
{
#region Type类,方法用Invoke调用的时候就 使用null:表示该方法是无参数的
//Type tp = typeof(Person);
//MethodInfo meth = tp.GetMethod("Say");//2、调用这个类中的Say方法,,注意:没有参数!!!
//object obj = Activator.CreateInstance(tp);//4、创建object对象,把tp放进去,就会返回一个Person的对象
//meth.Invoke(obj, null); // 当在派生类中重写时,调用具有给定参数的反射的方法或构造函数。
////5、也就是说,调用的方法Say(),是没有参数的,那么在用Invoke调用的时候就 使用null:表示该方法是无参数的
////3、先写上一个括号,发现,第一个参数是object 类型的,没有object类型,所以要先创建object类型
#endregion
#region Type类,方法用Invoke调用的时候就 使用new object[] { "肖名" }传递参数:表示该方法是有参数的
Type tp = typeof(Person);
MethodInfo meth = tp.GetMethod("Say");
object obj = Activator.CreateInstance(tp);
meth.Invoke(obj, new object[] { "肖名" });//new object[]是object类型 ,就是方法Say()的传递的参数 String Str
Console.ReadKey();
#endregion
}
}
public class Person//1首先,建一个类
{
//public void Say()// null的时候的方法,表示是无参数的方法Say
public void Say(string Str)
{
//Console.WriteLine("大家好!");
Console.WriteLine("大家好!" Str);//带参数的
}
}
}