首页 > 代码库 > .net Reflection(反射)- 一

.net Reflection(反射)- 一

  Reflection 反射需要引用 using System.Reflection; 命名空间。

   通过 Assembly 类的 Load( ); 加载指定的 程序集

     Assembly 是不能被实例化, 所以能通过调用静态方法Load();加载指定程序集。

     通过GetType()RefLiuyl中GetCond的类型

?
1
2
3
Assembly assembly = Assembly.Load("RefLiuyl");          
//获取类型,参数(名称空间+类)  
Type type = assembly.GetType("RefLiuyl.GetCon");

 还有一种当使用泛型的时候 GetName<T>() 。 直接 获取类型Type type = typeof(T);

 

 我们来看看部分内部Load原型静态方法:

    //Assembly内部Load原型 --部分
    public class Assembly
    {
        //Load静态重载原型
        public static Assembly Load(AssemblyName assemblyRef);
        public static Assembly Load(string assemblyString);
    }

 

这里的 AssemblyName 其实就是取 程序集
 AssemblyName classlibrary = new AssemblyName("ClassLibrary");
 Assembly assembly = Assembly.Load(classlibrary);

 Assembly 还可以通过路径来加载程序集

  Assembly assem = Assembly.LoadFrom("path");

    //Assembly内部Load原型 --部分
    public class Assembly
    {
        //Load静态重载原型 
        public static Assembly LoadFrom(string path);
    }

 

二。构造类型的实例

?
1
2
3
Assembly assembly = Assembly.Load("RefLiuyl");          
//获取类型,参数(名称空间+类)  
Type type = assembly.GetType("RefLiuyl.GetCon");<br>获取到类型后,我们需要实例化它。<br><br>通过System.Activator的CreateInstance方法来实例化它。
            AssemblyName classlibrary = new AssemblyName("ClassLibrary");

           // Assembly assembly = Assembly.Load(classlibrary);
            Assembly assembly = Assembly.Load("ClassLibrary");

            //通过GetType()获取类型
            //获取类型,参数(名称空间+类)   
            Type type = assembly.GetType("ClassLibrary.Student");

            //创建该对象的实例,object类型,参数(名称空间+类)   
            object instance = assembly.CreateInstance("ClassLibrary.Student");

            //或者直接使用type
            object instance1 = Activator.CreateInstance(type);

            //当使用泛型
            Type type = typeof(T);
            T destObj = Activator.CreateInstance<T>();
 Activator.CreateInstance(); 返回的就是 类实例


GetProperties(); 返回程序集类型中的所有属性
            //通过GetType()获取类型
            //获取类型,参数(名称空间+类)   
            Type type = assembly.GetType("ClassLibrary.Student");
            foreach (PropertyInfo prop in type.GetProperties())
            {
                string namses= prop.Name;
            }

返回的就是 程序集中 实例类的属性字段。