C# Activator.CreateInstance()
C#在类工厂中动态创建类的实例,所使用的方法为:
|
1. Activator.CreateInstance (Type) 2. Activator.CreateInstance (Type, Object[]) |
两种方法区别仅为:创建无参数的构造方法和创建有参数的构造函数。
//Activator.CreateInstance(Type)
object result = null;
Type typeofControl =null;
typeofControl = Type.GetType(vFullClassName);
result = Activator.CreateInstance(typeofControl);
//Activator.CreateInstance(Type,Object[])
object result = null;
Type typeofControl =null;
typeofControl = Type.GetType(vFullClassName);
result = Activator.CreateInstance(typeofControl, objParam);
但是在动态创建时,可能会动态使用到外部应用的DLL中类的实例,则此时需要进行反编译操作,使用Reflection命名控件下的Assembly类。
//先使用Assembly类载入DLL,再根据类的全路径获取类
object result = null;
Type typeofControl = null;
Assembly tempAssembly;
tempAssembly = Assembly.LoadFrom(vDllName);
typeofControl = tempAssembly.GetType(vFullClassName);
result = Activator.CreateInstance(typeofControl, objParam);
参考处处:http://blog.csdn.net/jaydawson/article/details/5539438
--------------------------------------------------
参考二:
--------------------------------------------------
使用与指定参数匹配程度最高的构造函数来创建指定类型的实例。
命名空间:System
程序集:mscorlib(在 mscorlib.dll 中)
public static Object CreateInstance (Type type)
Activator.CreateInstance 泛型方法 ()
注意:此方法在 .NET Framework 2.0 版中是新增的。
创建类型的一个实例,该类型由指定的泛型类型参数指定。
命名空间:System
程序集:mscorlib(在 mscorlib.dll 中)
public static T CreateInstance<T> ()
Activator.CreateInstance
(Type)实例
输入一个类的名称为参数,返回一个相应的类的实例。
这在工厂模式中是非常有用的,这样,可以使程序有更高的扩展性
/*
* Created by SharpDevelop.
* User: 19004991
* Date: 2009-8-6
* Time: 9:10
*/
using System; namespace ActivatorCreateInstance
{
public interface IObject
{
void printName();
}
public class ClassExam : IObject
{
private string name="default name";
public ClassExam()
{
}
public ClassExam(string name)
{
this.name = name;
}
public void printName()
{
Console .WriteLine (this.name );
}
}
public class Program
{
public Program()
{
}
public static void Main(string[] args)
{
// TODO: Implement Functionality Here
IObject obj1=(IObject)Activator.CreateInstance(System.Type.GetType ("ActivatorCreateInstance.ClassExam"));
obj1.printName();
IObject obj2=(IObject)Activator.CreateInstance(System.Type.GetType("ActivatorCreateInstance.ClassExam"),new string[]{"seted new name"});
obj2.printName();
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
}
网上代码System.Type.GetType内为"ActivatorCreateInstance.ClassExam,ActivatorExample"编译失败
C# Activator.CreateInstance()的更多相关文章
- C# Activator.CreateInstance()方法使用
C#在类工厂中动态创建类的实例,所使用的方法为: 1. Activator.CreateInstance (Type) 2. Activator.CreateInstance (Type, Objec ...
- 注意Activator.CreateInstance两个重载方法的性能
今天扩展一个Type的扩展方法New: public static object New(this Type type, params object[] args) { Guard.ArgumentN ...
- 关于Assembly.CreateInstance()与Activator.CreateInstance()方法
于Assembly.CreateInstance()与Activator.CreateInstance()方法 动 态创建类对象,大多是Activator.CreateInstance()和Activ ...
- Activator.CreateInstance 反射实例化对象
public class CommonReq { private String TransNo { get; set;} public String SubmitData { get; set; } ...
- Activator.CreateInstance 方法 (Type) 的用法
转自:http://www.cnblogs.com/lmfeng/archive/2012/01/30/2331666.html Activator.CreateInstance 方法 (Type) ...
- 用Activator.CreateInstance代替new实现类的实例化(转)
一直想得到这样一个函数,输入一个类的名称为参数,返回一个相应的类的实例. 这在工厂模式中是非常有用的 这样,可以使程序有更高的扩展性,例如,,下面的例子 如果现在有一个类,专门用来计算交通工具的速度, ...
- (转) C# Activator.CreateInstance()方法使用
C#在类工厂中动态创建类的实例,所使用的方法为: 1. Activator.CreateInstance (Type) 2. Activator.CreateInstance (Type, Objec ...
- C#中Activator.CreateInstance()方法用法分析
本文实例讲述了C#中Activator.CreateInstance()方法用法. Activator 类 包含特定的方法,用以在本地或从远程创建对象类型,或获取对现有远程对象的引用. C#在类工厂中 ...
- cSharp:use Activator.CreateInstance with an Interface?
///<summary> ///数据访问工厂 ///生成時間2015-2-13 10:54:34 ///塗聚文(Geovin Du) /// (利用工厂模式+反射机制+缓存机制,实现动态创 ...
随机推荐
- 【POJ3237】Tree(树链剖分+线段树)
Description You are given a tree with N nodes. The tree’s nodes are numbered 1 through N and its edg ...
- BLE开发的各种坑
这段时间在做低功耗蓝牙(BLE)应用的开发(并不涉及蓝牙协议栈).总体感觉 Android BLE 还是不太稳定,开发起来也是各种痛苦.这里记录一些杂项和开发中遇到的问题及其解决方法,避免大家踩坑.本 ...
- java学习面向对象之父子构造函数初始化
在之前讲到java面向对象继承的时候,我们只讲到了两个比较重要的知识点,一个是父子类当中有同名的成员变量,这个时候,我们引入了super这个关键字来区分这两个同名成员变量,除此之外,我们还讲到了父子同 ...
- PuTTY 信息泄露漏洞
漏洞名称: PuTTY 信息泄露漏洞 CNNVD编号: CNNVD-201308-380 发布时间: 2013-08-27 更新时间: 2013-08-27 危害等级: 低危 漏洞类型: 信息泄露 ...
- Google Map API 学习六
今天其实收货很大的 1.new google.maps.Circle 就是如何在地图上标注一个圆 3.getAnimation 在这里是通过获取Marker是否存在动作,然后如果存在动作的话,就将动作 ...
- (转载)JavaScript中的日期格式转换
(转载)http://www.php100.com/html/webkaifa/javascript/2008/1229/1618.html 今天做页面需要把JS里面的Date规范输出为“YYYY-M ...
- AD域设置
一.安装条件 · 安装者必须具有本地管理员权限 · 操作系统版本必须满足条件(windows server 2003 除WEB版外都满足) · 本地磁盘至少有一个NTFS文件系统 · 有TCP/IP设 ...
- JavaScript DOM-Ready 机制
IE9开始和其他现代浏览器可以通过绑定DOMContentLoaded事件:IE9之前的的浏览器需要绑定onreadystatechange事件并等待readyState为"complete ...
- 《University Calculus》-chape8-无穷序列和无穷级数-欧拉恒等式
写在前面:写在前面的当然是对大天朝教材的吐槽啦. 曾记否,高中所学虚数和复平面的概念,如此虚无的概念到了大学一门叫<模拟电子技术>的课程中居然明目张胆的开始进行计算! 曾记否,高中的指对运 ...
- tomacat 配置ssl协议
1.首先用jdk自带的工具keytool生成一个"服务器证书" a.命令行进入$JAVA_HOME/bin目录($JAVA_HOME为jdk的安装目录) b.输入:keytool ...