根据类型创建对象

2019-11-01  本文已影响0人  价值投机168
 class Program
{
    static void Main(string[] args)
    {
        /**********第一种***************/
        var types = Assembly.GetExecutingAssembly().GetTypes();//获取程序集的所有的类型
        List<Type> ltypes = new List<Type>();
        foreach (var item in types)
        {
            if (item.BaseType == typeof(Parent))//将Parent的子类型都放到list里面
            {
                ltypes.Add(item);
            }
        }

        object cc = Activator.CreateInstance(ltypes[0]);//根据类型,创建一个对象
        Console.WriteLine("/**********第一种***************/");
        Console.WriteLine(cc.ToString());//打印对象的内容

        /**********第二种***************/
        ltypes = new List<Type>();
        foreach (var item in types)
        {
            //if (item.GUID == typeof(Test).GUID) //得到一个具体的类的对象,要这样使用
            if(item == typeof(Test))//这样也行
            {
                ltypes.Add(item);
            }
        }

        cc = Activator.CreateInstance(ltypes[0]);//根据类型,创建一个对象
        Console.WriteLine("/**********第二种***************/");
        Console.WriteLine(cc.ToString());//打印对象的内容

        /**********第三种***************/
        Console.WriteLine("/**********第三种***************/");
        Test ttt = new Test();
        cc = Activator.CreateInstance(ttt.GetType());//根据类型,创建一个对象
        Console.WriteLine(cc.ToString());//打印对象的内容

        cc = Activator.CreateInstance(typeof(Test));//根据类型,创建一个对象
        Console.WriteLine(cc.ToString());//打印对象的内容

        Console.WriteLine(ttt.GetType().GUID == typeof(Test).GUID);//true

        Console.ReadKey();
    }
}

class Parent
{
    public override string ToString()
    {
        return "Parent";
    }
}

class Test : Parent
{
    public int aa = 100;
    public string cc = "test my";

    public override string ToString()
    {
        return this.aa + ":" + this.cc;
    }
}

}

上一篇 下一篇

猜你喜欢

热点阅读