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