反射
加载程序集
Assembly myAssembly = Assembly.LoadFile(@"MyAssembly.dll");
得到类
foreach (Type t in myAssembly.GetTypes())
得到类的方法
foreach (var method in t.GetMethods())
得到方法的参数
foreach (var parameter in method.GetParameters())
得到公共属性
foreach (var member in t.GetProperties())
//获取程序集中指定命名空间下的指定类型
Type myClassType = myAssembly.GetType("MyAssembly.MyClass");
//搜索类型中指定名称的方法
MethodInfo myClassMethod = myClassType.GetMethod("DoWork");
//调用程序集中指定命名空间下指定类型的无参构造函数来创建该类型的实例
object myClass = myAssembly.CreateInstance("MyAssembly.MyClass");
//调用指定实例的指定方法
myClassMethod.Invoke(myClass, new object[] { "学习C#" });
//获取参数与数组中指定类型匹配的构造函数
ConstructorInfo myClassConstructor = myClassType.GetConstructor(new Type[] { typeof(string) });
//调用有参构造函数创建类的实例
object myClassAnother = myClassConstructor.Invoke(new object[] { "李四" });
//调用指定实例的指定方法
myClassMethod.Invoke(myClassAnother, new object[] { "学习C++" });
//获取自定义特性
Type attributeType = myAssembly.GetType("MyAssembly.MyOwnAttribute");
//获取指定名称属性
PropertyInfo nameInfo = attributeType.GetProperty("Name");
//获取附加在类上的自定义特性实例
object[] attributes = myOwnClassType.GetCustomAttributes(attributeType, true);
//获取附加在方法上的自定义特性实例
object[] methodAttributes = method.GetCustomAttributes(attributeType, true);