zoukankan      html  css  js  c++  java
  • c# 反射简单小例子

    /////接口

    using System;
    usingSystem.Text;

    namespaceJiang.IForm
    {
        /// <summary>
        ///
    反射要实现该接口
       
    /// </summary>
      
    public interfaceIForm
      
    {
            /// <summary>
            ///
    form test
          
    /// </summary>
          
    stringFormName
            { get; set; }
            /// <summary>
            ///
    Run appliction
          
    /// </summary>
          
    voidRun();
        }
    }

    以下是实现接口的类

    using System;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    
    using Jiang.IForm;
    
    namespace RefLibraryUser
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                Close();
            }
        }
    
        public class Progarm:IForm
        {
            private string formname;
             ///设置窗体名称
            public string FormName
            {
                get
                {
                    return formname;
                }
                set
                {
                    formname = value;
                }
            }
             ///运行程序
            public void Run()
            {
                Form1 f1 = new Form1();
                f1.Text = this.FormName;
                f1.Show();
            }
          
        }
    }
    
    
    ///要反射的dll文件
               string files = Application.StartupPath + (@"\Plug-In\abc.RefLibraryUser.dll");
               ///加载dll文件
               Assembly assembly = Assembly.LoadFile(files);
               ////获取程序中的类型
               Type[] t = assembly.GetTypes();
               foreach (Type ty in t)
               {
                   if (ty.GetInterface("IForm") != null)///检查是否实现IForm该接口
                   {
                       /////创建实例
                       IForm f = (IForm)Activator.CreateInstance(ty);
                       f.FormName = "插件窗体";///设置反射程序中的名称
                       f.Run();//运行此反射程序
                       break;////为了提高运行效率(因为一个程序里我只有一个实现了这个接口,所以我找到一个就够了)。
                   }
               }
    

    主程序,反射dll文件

    ///要反射的dll文件
              
    stringfiles = Application.StartupPath + (@"\Plug-In\abc.RefLibraryUser.dll");
               ///加载dll文件
              
    Assemblyassembly = Assembly.LoadFile(files);
               ////获取程序中的类型
              
    Type[] t = assembly.GetTypes();
               foreach(Typety int)
               {
                   if(ty.GetInterface("IForm") != null)///检查是否实现IForm该接口
                  
    {
                       /////创建实例
                      
    IFormf = (IForm)Activator.CreateInstance(ty);
                       f.FormName = "插件窗体";///设置反射程序中的名称
                      
    f.Run();//运行此反射程序
                      
    break;////为了提高运行效率(因为一个程序里我只有一个实现了这个接口,所以我找到一个就够了)。
                  
    }
               }

  • 相关阅读:
    关于二叉树遍历的一点想法
    Mysqldump导入数据库很慢的解决办法
    javascript笔记收集
    再次讨论二叉树--如何根据先序和中序推选后序
    一道图的题目-拓扑序概念
    一道哈夫曼二叉树题目--稍微容易一点
    一道哈夫曼树的题目--好不容易
    证明二叉树节点数公式
    一道二叉树题目---顺序存储二叉树位置同层的关系
    POJ 3253 Fence Repair(贪心)
  • 原文地址:https://www.cnblogs.com/server126/p/1987013.html
Copyright © 2011-2022 走看看