using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Reflection; using System.Collections; namespace 反射 { #region MyClass public class MyClass { public string name = "names"; public MyClass() { MessageBox.Show("ok"); } } #endregion public partial class Form1 : Form { public Form1() { InitializeComponent(); } Hashtable HashtableForm; // 哈希 table 全局变量 private void button1_Click(object sender, EventArgs e) { CreateFormHT("Form2"); //字符串类名 实现的单件模式 MyClass m1 = CreateFormHTClass<MyClass>(); MessageBox.Show(m1.name); } void Formtemplet_FormClosed(object sender, FormClosedEventArgs e) { HashtableForm.Remove(sender.GetType());// 给Form 模板 增加的关闭事件,关闭则在Hashtable中去除记录 } private void Form1_Load(object sender, EventArgs e) { HashtableForm = new Hashtable(); } #region 用于MDI void CreateFormHT<T>() { // Assembly assembly = Assembly.Load("反射"); //映射此名称的名空间 Type type = typeof(T); //查看泛型 T 的数据类型 Form Formtemplet = (Form)Activator.CreateInstance(type); //根据 T 类型 创建 窗体 { if (!HashtableForm.Contains(type)) //如果 Hashtable中没有包含 这个 T 类型 { HashtableForm.Add(type, Formtemplet); //在Hashtable 记录 此类型 和 此类型的对象 Formtemplet.Show(); Formtemplet.FormClosed += new FormClosedEventHandler(Formtemplet_FormClosed);//创建 T 对象的关闭事件 } else { Formtemplet = (Form)HashtableForm[type]; //如果 Hashtable存在实例键值 就 获取实例并设置焦点 Formtemplet.Activate(); } } } #endregion T CreateFormHTClass<T>() { //
Assembly assembly = Assembly.Load("反射"); Type type = typeof(T); T templet = default(T); { if (!HashtableForm.Contains(type)) { templet = (T)Activator.CreateInstance(type); HashtableForm.Add(type, templet); } else { templet = (T)HashtableForm[type]; } } return templet; } void CreateFormHT(string FormClassName) { Assembly assembly = Assembly.Load("反射"); Type type = assembly.GetType("反射." + FormClassName); Form Formtemplet = (Form)Activator.CreateInstance(type); { if (!HashtableForm.Contains(type)) { HashtableForm.Add(type, Formtemplet); Formtemplet.Show(); Formtemplet.FormClosed += new FormClosedEventHandler(Formtemplet_FormClosed); } else { Formtemplet = (Form)HashtableForm[type]; Formtemplet.Activate(); } } } private void button2_Click(object sender, EventArgs e) { CreateFormHT<Form2>(); } } }