c# 反射---简单小例子

来源:互联网 发布:神仙水 去痘印 知乎 编辑:程序博客网 时间:2024/05/22 04:46

c# 反射---简单小例子

/////接口

using System;
usingSystem.Text;

namespaceJiang.IForm
{
    /// <summary>
    ///
反射要实现该接口
    
/// </summary>
   
public interfaceIForm
   
{
        /// <summary>
        ///
form test
       
/// </summary>
       
stringFormName
        { getset; }
        /// <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;////为了提高运行效率(因为一个程序里我只有一个实现了这个接口,所以我找到一个就够了)。
               
}
           }

0 0
原创粉丝点击