反射 别的用处先不管,至少在WinForm登录后的权限控制上有大用,比如登录后的窗体左侧树,点击通过字符串创建出窗体实例
案例如下图
AssTest类很简单
namespace assemblyTest { public class AssTest { public string Name{ get; set; } public int Age { get; set;} public string GetAssTest() { return string.Format("I Am {0}, i'm {1} years old", Name, Age); } public int SumAB(int a, int b) { return a + b; } } }
控制台程序
namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Assembly asb= Assembly.Load("assemblyTest");//类库信息 Type type = asb.GetType("assemblyTest.AssTest");//类的类型 object asstest = asb.CreateInstance("assemblyTest.AssTest");//创建类的对像 Form frmTest= (Form)asb.CreateInstance("assemblyTest.frmTest");//创建窗体的对像 类库中加了个窗体 这里也可以0.0 //属性赋值 type.GetProperty("Name").SetValue(asstest, "小王"); type.GetProperty("Age").SetValue(asstest, 18); MethodInfo mi = type.GetMethod("GetAssTest");//找到方法 Console.WriteLine( mi.Invoke(asstest,null)) ;//调用并输出 mi = type.GetMethod("SumAB"); object sumab = mi.Invoke(asstest, new object[] { 1, 2 }); Console.WriteLine(sumab);//调用并输出 frmTest.ShowDialog();//显示窗体 Console.ReadKey(); } } }
结果

//全路径 Assembly asm = Assembly.LoadFile(@"D:我的项目vsSWIESoftWare权限管理Test1inDebugModel.dll");//FullPath //取类型 Type t = asm.GetType("Model.AA_User"); //生成对象 object u = Activator.CreateInstance(t); //查找对像属性 PropertyInfo p = t.GetProperty("Code"); p.SetValue(u, "123"); //取属性值 object getproperty = t.GetProperty("Code").GetValue(u, null); //方法一 object getproperty1 = u.GetType().GetProperty("Code").GetValue(u, null); //方法二