lqc自用 反射创建对象

     C# 动态创建对象只要有两大类  Activator 和 Assembly 。

Activator 类
       Activator 类提供好几个动态创建对象的重载方法。

1:public static object CreateInstance(Type type);
2:public static object CreateInstance(Type type, params object[] args);

动态创建对象主要接受的参数为Type,而获取Type对象有三种方式

1:Type type = Type.GetType("命名空间名称.类名");

2:Type type = typeof("类名");

3:Person p = new Person(); //通过对象来进行创建type

 Type type = p.GetType();

两种方法区别仅为:创建无参数的构造方法和创建有参数的构造函数。

 Type type = typeof(Person);

            var p = Activator.CreateInstance(type) as Person;

public class Person

    {

        public Person()

        {

        }

        public Person(string name, int age)

        {

            this.Name = name;

            this.Age = 1;

        }

        public string Name { setget; }

        public int Age { setget; }

        public void SayHello()

        {

            Console.WriteLine("你好");

        }

    }

动态创建创建有参数的构造函数

Type type = typeof(Person);

            var p = Activator.CreateInstance(type,new object[] { "xiaohong",1}) as Person;

            Console.WriteLine(p.Name);

Assembly 类

//Assembly ass = Assembly.Load(Assembly.GetExecutingAssembly().FullName);  知道当前创建的对象是当前程序集

          // Assembly ass = Assembly.LoadFile(@"程序集的全路径"); 

           Assembly ass = Assembly.LoadFrom(@"程序集的全路径");

// LoadFile和LoadFrom 区别是 LoadFrom它会载入dll文件及其引用的其他dll,而LoadFile 只载入相应的dll文件

           Type type = null;

           ass.GetTypes().ToList().ForEach(i =>

           {

               if (i.IsClass && i.IsPublic && i.Name == "Person")

               {

                   type = i;

               }

           });

           var p = Activator.CreateInstance(type, new object[] { "xiaohong", 1 }) as Person;

           Console.WriteLine(p.Name);

           Console.ReadKey();

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值