C# 反射

来源:互联网 发布:网络十二主神 编辑:程序博客网 时间:2024/06/08 10:13
在编程中很多情况我们都需要用到反射:
(1)使用Assembly定义和加载程序集,加载在程序集清单中列出模块,以及从此程序集中查找类型并创建该类型的实例。
(2)使用Module了解包含模块的程序集以及模块中的类等,还可以获取在模块上定义的所有全局方法或其他特定的非全局方法。
(3)使用ConstructorInfo了解构造函数的名称、参数、访问修饰符(如pulic 或private)和实现详细信息(如abstract或virtual)等。
(4)使用MethodInfo了解方法的名称、返回类型、参数、访问修饰符(如pulic 或private)和实现详细信息(如abstract或virtual)等。
(5)使用FiedInfo了解字段的名称、访问修饰符(如public或private)和实现详细信息(如static)等,并获取或设置字段值。
(6)使用EventInfo了解事件的名称、事件处理程序数据类型、自定义属性、声明类型和反射类型等,添加或移除事件处理程序。
(7)使用PropertyInfo了解属性的名称、数据类型、声明类型、反射类型和只读或可写状态等,获取或设置属性值。
(8)使用ParameterInfo了解参数的名称、数据类型、是输入参数还是输出参数,以及参数在方法签名中的位置等。
反射用到的命名空间:
    System.Reflection
    System.Type
    System.Reflection.Assembly
反射用到的主要类:
    System.Type 类--通过这个类可以访问任何给定数据类型的信息。
    System.Reflection.Assembly类--它可以用于访问给定程序集的信息,或者把这个程序集加载到程序中。
(1)System.Reflection.Assembly类 
        Assembly executorAss = Assembly.Load(executorDLLName);
        Type type = executorAss.GetType(executorTypeName);
        传入初始化参数(ssap)
        object a=(object)Activator.CreateInstance(type, ssap);
        实例:
         public class Executor
{
 public Executor(Dictionary<string, T_SupplierAttr> paras)
        {
            this.AttrList = paras;

        }
 public Dictionary<string, T_SupplierAttr> AttrList { get; set; }

}
(2)已知一个对象,通过反射来获取属性名称与值
 public string GetSignStr<T>(T t)
        {
            string str = "";
            Type type = t.GetType();
            PropertyInfo[] ps = type.GetProperties();
            foreach (PropertyInfo i in ps)
            {
                object obj = i.GetValue(t, null);
                string name = i.Name;
                str += obj + name;
                Console.WriteLine(obj + "|" + name);
            }
            return str;
        }

原创粉丝点击