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;////为了提高运行效率(因为一个程序里我只有一个实现了这个接口,所以我找到一个就够了)。
}
}