private void bt按类生成程序集_Click(object sender, EventArgs e) { if (CustClassManager.Instance.AllClasses.Count > 0) { foreach (var item in CustClassManager.Instance.AllClasses) { var var = ClassDynamicCreater.CreateInstance(item.ClassName, item.PropertyInfos.ToList()); item.GetTypeFormInstance(var); } //重新绑定数据源 this.择Type.DataSource = CustClassManager.Instance.AllAvailableTypes; MessageBox.Show("生成完成!"); } else { MessageBox.Show("没有任何需要生成的类!"); } }
public static void Main2() { #region 演示一:动态生成类。 //生成一个类t。 Type t = ClassDynamicCreater.BuildType("MyClass"); #endregion #region 演示二:动态添加属性到类。 //先定义两个属性。 List <CustPropertyInfo> lcpi = new List <CustPropertyInfo>(); CustPropertyInfo cpi; cpi = new CustPropertyInfo("System.String", "S1"); lcpi.Add(cpi); cpi = new CustPropertyInfo("System.String", "S2"); lcpi.Add(cpi); //再加入上面定义的两个属性到我们生成的类t。 t = ClassDynamicCreater.AddProperty(t, lcpi); //把它显示出来。 DispProperty(t); //再定义三个属性。 lcpi.Clear(); cpi = new CustPropertyInfo(SystemDataType.Int, "I1"); //"System.Int32" lcpi.Add(cpi); cpi = new CustPropertyInfo("System.Int32", "I2"); lcpi.Add(cpi); cpi = new CustPropertyInfo("System.Object", "O1"); lcpi.Add(cpi); //再加入上面定义的三个属性到我们生成的类t。 t = ClassDynamicCreater.AddProperty(t, lcpi); //再把它显示出来,看看有没有增加到5个属性。 DispProperty(t); #endregion #region 演示三:动态从类里删除属性。 //把'S1'属性从类t中删除。 t = ClassDynamicCreater.DeleteProperty(t, "S1"); //显示出来,可以看到'S1'不见了。 DispProperty(t); #endregion #region 演示四:动态获取和设置属性值。 //先生成一个类t的实例o。 object o = ClassDynamicCreater.CreateInstance(t); //给S2,I2,O1属性赋值。 ClassDynamicCreater.SetPropertyValue(o, "S2", "abcd"); ClassDynamicCreater.SetPropertyValue(o, "I2", 1234); ClassDynamicCreater.SetPropertyValue(o, "O1", 7.5); //再把S2,I2,01的属性值显示出来。 Console.WriteLine("S2 = {0}", ClassDynamicCreater.GetPropertyValue(o, "S2")); Console.WriteLine("I2 = {0}", ClassDynamicCreater.GetPropertyValue(o, "I2")); Console.WriteLine("O1 = {0}", ClassDynamicCreater.GetPropertyValue(o, "O1")); #endregion #region 演示五:类嵌套设置属性值 Type t2 = ClassDynamicCreater.BuildType("MyClass2"); List <CustPropertyInfo> lcpi2 = new List <CustPropertyInfo>(); CustPropertyInfo cpi2; //cpi2 = new CustPropertyInfo(t.FullName, "mc"); //t2类中加入一个t属性 cpi2 = new CustPropertyInfo(t, "MC"); //t2类中加入一个t属性 lcpi2.Add(cpi2); TypeInfo tInfo = t.GetTypeInfo(); //t2类中加入一个t类的列表属性 //cpi2 = new CustPropertyInfo(typeof(List<>), "MCL"); cpi2 = new CustPropertyInfo(typeof(List <>), t, "MCL"); lcpi2.Add(cpi2); t2 = ClassDynamicCreater.AddProperty(t2, lcpi2); DispProperty(t2); //先生成一个类t2的实例o。 object o2 = ClassDynamicCreater.CreateInstance(t2); //给MC属性赋值。 ClassDynamicCreater.SetPropertyValue(o2, "MC", o); //o是类t的一个实例 //给MCL属性赋值。 dynamic Dynamic = ClassDynamicCreater.CreateGeneric(typeof(List <>), t); //object o = ClassDynamicCreater.CreateInstance(t); dynamic o1 = o; Dynamic.Add(o1); ClassDynamicCreater.SetPropertyValue(o2, "MCL", Dynamic); //再把mc属性值显示出来。 Console.WriteLine("MC = {0}", ClassDynamicCreater.GetPropertyValue(o2, "MC")); #endregion object genericList = ClassDynamicCreater.CreateGeneric(typeof(List <>), typeof(StudentTest)); dynamic dynamic = genericList; dynamic.Add(new StudentTest()); Console.Read(); }