C#开发之反射的简单使用
2016-12-02 16:18
288 查看
奋斗的蘑菇 原文C#开发之反射的简单使用
以前在Windows Mobile中写过一个写好的Dll中的图片的例子,现在在项目中有接触到在一个大的窗体中,动态的加载一些窗体这样的需求。将功能按照模块的划分进行单独开发成单独的Dll,主框架根据需要动态加载不同的Dll来加载不同的窗体来满足不同的需求。
1.以下是一个简单的例子,有一个按钮点击事件,点击事件实现加载已知的Dll中的窗体。
2.反射机制调用Dll中的方法
以前在Windows Mobile中写过一个写好的Dll中的图片的例子,现在在项目中有接触到在一个大的窗体中,动态的加载一些窗体这样的需求。将功能按照模块的划分进行单独开发成单独的Dll,主框架根据需要动态加载不同的Dll来加载不同的窗体来满足不同的需求。
1.以下是一个简单的例子,有一个按钮点击事件,点击事件实现加载已知的Dll中的窗体。
private void button1_Click(object sender, EventArgs e) { //点击加载DLL中的窗体Form4 string dllName = "ClassLibrary1.dll"; string formName = "ClassLibrary1.Form4"; Form ff = null; //加载Dll Assembly MyAssembly = Assembly.LoadFrom(dllName); //获得Dll中的所有类、成员 Type[] types = MyAssembly.GetTypes(); Type type = null; //遍历出需要的成员(窗体) foreach(Type t in types) { if(t.FullName == formName) { type = t; break; } } //对窗体进行实例化 ff = (Form)Activator.CreateInstance(type); ff.Show(); }
2.反射机制调用Dll中的方法
private void button1_Click(object sender, EventArgs e) { //点击加载DLL中的窗体Form4 string dllName = "ClassLibrary1.dll"; string formName = "ClassLibrary1.Form4"; Form ff = null; //加载Dll Assembly MyAssembly = Assembly.LoadFrom(dllName); //获得Dll中的所有类、成员 Type[] types = MyAssembly.GetTypes(); Type type = null; //遍历出需要的成员(窗体) foreach(Type t in types) { if(t.FullName == formName) { type = t; break; } } //对窗体进行实例化 ff = (Form)Activator.CreateInstance(type); ff.Show(); } public string Add(int x, int y) { return x + y + ""; } private void button2_Click(object sender, EventArgs e) { //加载Dll信息 string dllName = "ClassLibrary1.dll"; string dllNamespace="ClassLibrary1"; string className = "Class1"; string methodName = "Add"; //调用的方法参数 object[] parameters = new object[2] { 1, 2 }; string message = ""; //加载Dll信息 Assembly MyAssembly = Assembly.LoadFrom(dllName); Type[] types = MyAssembly.GetTypes(); //遍历方法所在的类 foreach(Type t in types) { if(t.Namespace == dllNamespace && t.Name == className) { MethodInfo m = t.GetMethod(methodName); if(m != null) { //调用Dll中的方法 object o = Activator.CreateInstance(t); message= m.Invoke(o, parameters).ToString(); MessageBox.Show(message); } else MessageBox.Show(" 装载出错 !"); } } }
相关文章推荐
- C#开发之反射的简单使用
- 使用C#开发一个简单的P2P应用
- 使用C#开发一个简单的P2P应用
- 使用反射和codeDom实现C#插件开发(2)dll开发
- [C#]使用TcpListener及TcpClient开发一个简单的Chat工具
- 使用C#开发一个简单的P2P应用
- 使用反射和codeDom实现C#插件开发(3)主程序开发之动态类
- 使用C#开发一个简单的P2P应用
- Visual Studio 2017中使用正则修改部分内容 如何使用ILAsm与ILDasm修改.Net exe(dll)文件 C#学习-图解教程(1):格式化数字字符串 小程序开发之图片转Base64(C#、.Net) jquery遍历table为每一个单元格取值及赋值 。net加密解密相关方法 .net关于坐标之间一些简单操作
- 使用C#开发一个简单的P2P应用
- 使用C#开发一个简单的P2P应用
- 使用C#开发一个简单的P2P应用
- 使用反射和codeDom实现C#插件开发(4)主程序开发之main函数编写
- 使用C#开发一个简单的P2P应用
- 使用C#开发一个简单的P2P应用
- 使用vs2010-C#开发简单语音系统
- asp.net(c#)中使用反射动态加载dll简单示例
- C#使用TcpListener及TcpClient开发一个简单的Chat工具实例
- 使用C#开发HTTP服务器系列之更简单的实现方式
- 使用反射和codeDOM实现C#插件开发(1)由来