反射简单调用

 1  class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             string path = @"J:\beforesoft\Test\NET.Reflection\bin\Debug\NET.Reflection.dll";
 6             Assembly ass = Assembly.LoadFile(path);
 7             //获取类
 8             //第一种方法,在类的构造函数是无参时使用方便,在有参时就不容易实现
 9             //object obj = ass.CreateInstance("NET.Reflection.Person");
10             //Type type = obj.GetType();
11             //第二种方法,通过获得类型的构造函数来实例化对象,在构造函数是有参时也容易实现
12             Type type = ass.GetType("NET.Reflection.Person");
13             //ConstructorInfo construct = type .GetConstructor(new Type[0]);
14             //object obj = construct.Invoke(null);
15             ConstructorInfo constructor = type.GetConstructor(new Type[] { typeof(string), typeof(int) });//构造函数调用有参构造函数
16             object obj = constructor.Invoke(new object[] { "张三", 20 });
17             MethodInfo method1 = type.GetMethod("SayName");//得到无参公有方法
18             MethodInfo method2 = type.GetMethod("SayAge", BindingFlags.Instance | BindingFlags.NonPublic);//得到私有方法
19             MethodInfo method3 = type.GetMethod("GetName", new Type[] { typeof(string) });//得到带参数的公有方法(后面的Type类型可以省略,但如果是重载方法就不能省)
20             MethodInfo method4 = type.GetMethod("GetName", new Type[0]);
21             MethodInfo method5 = type.GetMethod("PrintAge");//得到参数是ref的的方法
22             PropertyInfo Name = type.GetProperty("Name");//得到属性
23             PropertyInfo Age = type.GetProperty("Age");
24             FieldInfo name = type.GetField("name", BindingFlags.Instance | BindingFlags.NonPublic);//得到字段(全是私有的)
25             Name.SetValue(obj, "李四", null);//给Name设值,后面的null是对应的索引器
26             Age.SetValue(obj, 23, null);
27             method1.Invoke(obj, null);
28 
29             method2.Invoke(obj, null);
30 
31             Console.WriteLine(method3.Invoke(obj, new object[] { "王五" }));//调用有返回值的方法
32 
33             method4.Invoke(obj, null);
34 
35             method5.Invoke(obj, new object[] { 14 });//调用参数是ref的方法
36             Console.ReadLine();
37         }
38     }

 

上一篇:MySql存储过程


下一篇:Sql结构修改