【C# 反射】使用 Activator 类 -激活器
创建类的实例:
//需要添加对Education.dll的引用才能正确执行
object CreateInstanceKind1 = Activator.CreateInstance("Education", "People.Person"); //不需要添加引用,因为已经传入路径参数,它默认在当前程序集的目录下查找
object CreateInstanceKind2 = Activator.CreateInstanceFrom("Education.dll", "People.Person"); //需要添加引用,并且引入命名空间
Type type = typeof(Person);
object CreateInstanceKind3 = Activator.CreateInstance(type);
创建泛型的实例:
// 先创建开放泛型
Type openType = typeof(List<>);
// 再创建具象泛型
Type target = openType.MakeGenericType(new[] { typeof(string) });
// 最后创建泛型实例
List<string> result = (List<string>)Activator.CreateInstance(target);
System.Activator
System.Activator类中提供了三组静态方法来创建类型的实例,每组方法均提供多个重载,适用不同的场景。个别重载方法返回ObjectHandle对象,需要unwrap后才能获取对象实例。
CreateInstance :使用最符合指定参数的构造函数创建指定类型的实例。
CreateInstanceFrom :使用指定的程序集文件和与指定参数匹配程度最高的构造函数来创建指定名称的类型的实例。
以下实例代码演示了如何使用上述方法创建对象实例:
public class Employee
{
public String Name { get; set; }
public Employee(String name)
{
Name = name;
} public Employee ()
{
} public void Say(String greeting)
{
Console.WriteLine(String.Format("Employee {0} say: {1} ", Name, greeting));
}
}
// 使用无参构造函数
var employee = (Employee)Activator.CreateInstance(typeof(Employee));
employee.Say("CreateInstance with default ctor"); // 使用有参构造函数
employee=(Employee)Activator.CreateInstance(typeof(Employee), new object[] { "David" });
employee.Say("CreateInstance with ctor with args"); string assembly ="Test, Version=1.0.4562.31232, Culture=neutral, PublicKeyToken=null";
string type="Test.Tests.Employee";
var employeeHandle = Activator.CreateInstance(assembly,type);
employee = (Employee)employeeHandle.Unwrap();
employee.Say("CreateInstance and unwrap."); string assemblyPath=@"E:\StudyProj\ShartDev\Test\Test\bin\Debug\Test.exe";
employeeHandle = Activator.CreateInstanceFrom(assemblyPath,type);
employee = (Employee)employeeHandle.Unwrap();
employee.Say("CreateInstanceFrom and unwrap.");
【C# 反射】使用 Activator 类 -激活器的更多相关文章
- java中的反射机制,以及如何通过反射获取一个类的构造方法 ,成员变量,方法,详细。。
首先先说一下类的加载,流程.只有明确了类这个对象的存在才可以更好的理解反射的原因,以及反射的机制. 一. 类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三 ...
- c# 反射得到实体类的字段名称和值,DataTable转List<T>
/// <summary> /// 反射得到实体类的字段名称和值 /// var dict = GetProperties(model); /// </summary> /// ...
- Java类载入器 ClassLoader的解析
//參考 : http://www.ibm.com/developerworks/cn/java/j-lo-classloader/ 类载入器基本概念 类载入器是 Java 语言的一个创新,也是 Ja ...
- Assembly中Load, LoadFrom, LoadFile以及AppDomain, Activator类中相应函数的区别
Assembly和AppDomain的一些关于动态加载程序集的函数有些令人头疼,但细细研究后还是可以将他们区分的. 这些函数大致可以分为四类: 第一类:加载到Load Context内 Load Co ...
- C#使用反射机制获取类信息[转]
http://www.cnblogs.com/zhoufoxcn/archive/2006/10/31/2515873.html 1.用反射动态创建类实例,并调用其公有成员函数. //新建一个类库项目 ...
- Tomcat类载入器机制(Tomcat源代码解析六)
要说Tomcat的Classloader机制,我们还得从Bootstrap開始.在BootStrap初始化的时候.调用了org.apache.catalina.startup.Bootstrap#in ...
- C#使用反射机制获取类信息
1.用反射动态创建类实例,并调用其公有成员函数. //新建一个类库项目,增加一个GetSum方法. using System; namespace ClassLibrary1 { publi ...
- org.reflections 接口通过反射获取实现类源码研究
org.reflections 接口通过反射获取实现类源码研究 版本 org.reflections reflections 0.9.12 Reflections通过扫描classpath,索引元数据 ...
- 对tomcat中使用反射加载类的理解
public void init() throws Exception { initClassLoaders(); //加载一下jar包和类 Thread.currentThread().setCon ...
随机推荐
- Cesium入门1 - Cesium介绍
Cesium入门1 - Cesium介绍 Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ Cesium简介 Ce ...
- spring事务隔离级别、传播机制以及简单配置
转自 https://blog.csdn.net/zht741322694/article/details/78676964 一.spring支持的事务声明方式1. 编程式事务 当系统需要明确的, ...
- javaObject类-equals方法及覆盖
1 package face_object; 2 /* 3 * Object:所有类的根类. 4 * Object是不断抽取而来的,具备所有对象都具备的共性内容. 5 * 常用的共性功能: 6 * 7 ...
- python利用正则表达式提取文本中特定内容
正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式. re 模块使 Python ...
- python 如何获取当前系统的时间
1.导入包 import datetime 2.获取当前的时间 curr_time = datetime.datetime.now() # 2019-07-06 14:55:56.873893 < ...
- Vue之 css3 样式重置 代码
reset.css @charset "utf-8";html{background-color:#fff;color:#000;font-size:12px} body,ul,o ...
- Properties打印流
简介 java.util.Properties 继承于 Hashtable ,来表示一个持久的属性集.它使用键值结构存储数据,每个键及其对应值都是一个字符串.该类也被许多Java类使用,比如获取系统属 ...
- RSA公钥加密-私钥解密/私钥加密-公钥解密
package com.tebon.ams.util;import org.apache.commons.codec.binary.Base64;import org.apache.log4j.Log ...
- Vuex 状态管理的工作原理
Vuex 状态管理的工作原理 为什么要使用 Vuex 当我们使用 Vue.js 来开发一个单页应用时,经常会遇到一些组件间共享的数据或状态,或是需要通过 props 深层传递的一些数据.在应用规模较小 ...
- Jmeter平均响应时间和TPS的计算方法
转自:https://www.cnblogs.com/xianlai-huang/p/7795215.html Jmeter的Throughput和平均RT的计算 1.TPS:每秒处理的事务数,jme ...