C#的反射_2简单使用

1:动态加载程序集,并获得程序集的类型。

     动态加载程序集的一个类  Assembly

namespace 反射类型的使用
{
    class Program
    {
        static void Main(string[] args)
        {

              Assembly  assembly  =   Assembly.LoadFile( @" Path / HelloWord.exe  ") ;  / /加载指定路径下的程序集 

             Type[ ]  typearr =  assembly .GetTypes() ; // 获得程序集中类型的数组 --- 循环遍历typearr可以获得程序集中定义的类型

             Type[ ]  publictypearr  =    assembly.GetExportedTypes();  / / 获取程序集中所有的公共类型

             / /  在知道程序集中的情况时,也可以通过类型名称来获得类型

              Type   type  =  smb.GetType("TypesHelloWord.Person");            

            / / 获得了执行的类型后就可以获得该类型指定的方法了。

            MethodInfo  mdinfo = type.GetMethod("PublicSayHello"); / /方法名称    GetMethods() 可以获得方法的数组

            object   personObj  =   Activator.CreateInstance(type);   / / 创建该方法所在类的对象

            dminfo.Invoke(personObj, null) ; / / 静态方法不用传入对象,实列方法才需要传入对象,第二个是传入参数值

            / /  如果方法有返回值,就直接接收Invoke() ; 的返回值、方法需要参数以object[ ] 的方式传参 

 MethodInfo methodInfo = type.GetMethod("HelloWord", new Type[] { typeof(string), typeof(double), typeof(bool) });//获得有参数的方法,参数个数会自动匹配

           object obj = methodInfo.Invoke(Activator.CreateInstance(type), new  object[ ] { "张三", 1.00, false }); //调用有参数有返回值的方法

          //调用带参数的构造函数

          ConstructorInfo  cusInfo =    type .GetConstructor(new  Type[ ] { typeof(string), typeof(string), typeof(string) } ; //先获得这个带参构造器

            object obj1 =  cusInfo.Invoke(new object[] { "张三", "22", "男" });  / /传参  调用构造器方法 返回构造器类的对象

            PropertyInfo  proinfo  =   type.GetProperty("Name"); / /获得属性对象

            object  strObj   =   proinfo.GetValue(obj1,null);  / / 获得属性值

         }

     }

}


 

   

猜你喜欢

转载自blog.csdn.net/m0_37852399/article/details/83927866