C#反射(二)

长时间没有回顾反射知识了,今天就讲解一下反射的一般第二个用法。

二.对方法,属性等的反射

 首先需要写一个测试类,生成.exe或.dll文件。

class Test

    {   public Test()//普通构造方法

        {   }

        public string writeString(string s)//有参方法

        {   return "welcome:" + s;  }

        public static string staticString(string s)//静态方法

        {   return "welcome:" + s;   }

        public string writeStringNO()//无参方法

        {     return "welcome:chen" ;  }}

找出.exe文件,为了方便寻找,可以暂时复制在桌面上。

常规调用测试类方法,采用创建一个对象并实例化来引用方法,比如:

  Test t=new Test();

   t.writeString();

反射调用(两个项目之间调用):

再创建一个ConsoleApplication2 控制台程序。

先引用命名空间 using System.Reflection;

ConsoleApplication2:

//使用反射

 

static void Main(string[] args)

{

Assembly ass;//程序集

Type ty;//相当于类

Object ob;//相当于对象

 

 

string path = @"C:\Users\Shuang\Desktop\ConsoleApplication1.exe";//程序集路径

ass = Assembly.LoadFile(path);//加载程序集

ty = ass.GetType("ConsoleApplication1.Test");//获取Test类名;格式:"命名空间.类名"

MethodInfo meth = ty.GetMethod("writeString");//获取方法,格式:"方法名"     有参数

MethodInfo meth1 = ty.GetMethod("writeStringNO");//获取方法,格式:"方法名"  无参数

MethodInfo meth2 = ty.GetMethod("staticString");//获取方法,格式:"方法名"   静态

ob = ass.CreateInstance("ConsoleApplication1.Test");//创建一个对象, 格式:"命名空间.类名"

 

string[] canshu = { "chen1"};//参数数组

string res = (string)meth.Invoke(ob,canshu);//获取结果;格式:对象,参数(参数为object数组)    有参数

string res1 = (string)meth1.Invoke(ob, null);//获取结果;格式:对象,参数(参数为object数组)    无参数

string res2 = (string)meth2.Invoke(null, canshu);///获取结果;格式:对象,参数(参数为object数组)    静态

Console.Write("有参:"+res+"\n");

Console.Write("无参:" + res1 + "\n");

Console.Write("静态:" + res2);

 

Console.ReadLine();

}

 

 

 

 

 

 

 

 

 

 

 

posted @ 2016-05-03 20:37  安以痕_陈  阅读(158)  评论(0编辑  收藏  举报