C# 反射之动态创建对象


引言:

       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 { set; get; }
        public int Age { set; get; }
        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();

  


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM