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("没有任何需要生成的类!");
            }
        }
Ejemplo n.º 2
0
    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();
    }