• C#开发之反射的简单使用


    奋斗的蘑菇 原文C#开发之反射的简单使用

    以前在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(" 装载出错 !");  
            }  
        }  
      
    }  
  • 相关阅读:
    获取单选框的值
    HTML5本地存储详解
    设为首页和加入收藏
    用PhotoSwipe制作相册,手势可放大
    iOS 加载本地 HTML 文件 CSS 样式图片无效果
    PhotoSwipe简介
    Flexslider图片轮播、文字图片相结合滑动切换效果
    网页中插入视频的方法----腾讯、优酷为例
    webapp在Android中点击链接的时候会有淡蓝色的遮罩层
    C# 获取北京时间 (根据纪元时间(1970/1/1)转换为DateTime)
  • 原文地址:https://www.cnblogs.com/arxive/p/6126212.html
Copyright © 2020-2023  润新知