用Activator.CreateInstance代替new实现类的实例化
一直想得到这样一个函数,输入一个类的名称为参数,返回一个相应的类的实例.
这在工厂模式中是非常有用的
这样,可以使程序有更高的扩展性,例如,,下面的例子
如果现在有一个类,专门用来计算交通工具的速度,不同的交通工具计算方法是不一样的,但是到底有那些交通工具是未知的或者是可变的,这种情况下,我们可能觉得要在添加交通工具的时候,需要修改用来计算速度的那个类,
但如果用Activator .CreateInstance创建实例,通过接口技术,则只要向程序集添加一个交通工具类,而不需要修改任何其它代码..实现了高扩展性.,
示例如下:
//接口:比如,在上例中,可以是交通工具必需实现的接口 using System; namespace ActivatorCreateInstance
{
/// <summary>
/// IObjcet 的摘要说明。
/// </summary>
public interface IObjcet
{
void printName();
}
}
using System; namespace ActivatorCreateInstance
{
/// <summary>
/// ClassExam 的摘要说明。
/// </summary>
public class ClassExam:IObjcet
{
private string name="default name";
public ClassExam()
{ } public ClassExam(string name)
{
this.name =name;
} public void printName()
{
Console .WriteLine (this.ToString ()+"'s name is:");
Console .WriteLine (this.name ); }
namespace ActivatorCreateInstance
{
/// <summary>
/// main 的摘要说明。
/// </summary>
public class main
{
public main()
{ } public static void Main()
{//用Activator .CreateInstance创建函数实例,默认的不带参数的构造函数
IObjcet obj=(IObjcet)Activator .CreateInstance(System.Type .GetType ("ActivatorCreateInstance.ClassExam,ActivatorExample" ),null);
//System.Type .GetType 命名空间.类名,程序集
obj.printName(); //调用ClassExam类的另一个带参数构造函数
IObjcet obj2=(IObjcet)System.Activator .CreateInstance (System.Type .GetType ("ActivatorCreateInstance.ClassExam,ActivatorExample" ),new string []{"seted new name"});
obj2.printName ();
}
}
}
用Activator.CreateInstance代替new实现类的实例化的更多相关文章
- 用Activator.CreateInstance代替new实现类的实例化(转)
一直想得到这样一个函数,输入一个类的名称为参数,返回一个相应的类的实例. 这在工厂模式中是非常有用的 这样,可以使程序有更高的扩展性,例如,,下面的例子 如果现在有一个类,专门用来计算交通工具的速度, ...
- C# Activator.CreateInstance 动态创建类的实例(二)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- C# Activator.CreateInstance 动态创建类的实例(一)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- C# Activator.CreateInstance()方法使用
C#在类工厂中动态创建类的实例,所使用的方法为: 1. Activator.CreateInstance (Type) 2. Activator.CreateInstance (Type, Objec ...
- 关于Assembly.CreateInstance()与Activator.CreateInstance()方法
于Assembly.CreateInstance()与Activator.CreateInstance()方法 动 态创建类对象,大多是Activator.CreateInstance()和Activ ...
- Activator.CreateInstance 方法 (Type) 的用法
转自:http://www.cnblogs.com/lmfeng/archive/2012/01/30/2331666.html Activator.CreateInstance 方法 (Type) ...
- C# Activator.CreateInstance()
C#在类工厂中动态创建类的实例,所使用的方法为: 1. Activator.CreateInstance (Type) 2. Activator.CreateInstance (Type, Objec ...
- (转) C# Activator.CreateInstance()方法使用
C#在类工厂中动态创建类的实例,所使用的方法为: 1. Activator.CreateInstance (Type) 2. Activator.CreateInstance (Type, Objec ...
- C#中Activator.CreateInstance()方法用法分析
本文实例讲述了C#中Activator.CreateInstance()方法用法. Activator 类 包含特定的方法,用以在本地或从远程创建对象类型,或获取对现有远程对象的引用. C#在类工厂中 ...
随机推荐
- Linux操作系统load average过高,kworker占用较多cpu
Linux操作系统load average过高,kworker占用较多cpu 今天巡检发现,mc1的K8S服务器集群有些异常,负载不太均衡.其中10.2.75.32-34,49的load averag ...
- K-Means算法及代码实现
1.K-Means算法 K-Means算法,也被称为K-平均或K-均值算法,是一种广泛使用的聚类算法.K-Means算法是聚焦于相似的无监督的算法,以距离作为数据对象间相似性度量的标准,即数据对象间的 ...
- 第11组 Beta冲刺(5/5)
第11组 Beta冲刺(5/5) 队名 不知道叫什么团队 组长博客 https://www.cnblogs.com/xxylac/p/12031050.html 作业博客 https://edu. ...
- 《你不知道的JavaScript(上)》笔记——作用域是什么
Javascript是一门编译语言,它不是提前编译的, 编译结果也不能在分布式系统中进行移植. 在传统编译语言的流程中, 程序中的一段源代码在执行之前会经历三个步骤, 统称为"编译" ...
- [工具]tcping检查开放的端口
tcping小工具是一款用于tcp监控的软件.tcping小工具可以时刻监控服务器的网络情况,包括ping值和端口状态,可以突破机房和服务器的禁用设置,是一款十分实用的网络分析小工具. 下载地址:ht ...
- 从零搭建配置Cuckoo Sandbox
1.安装依赖 $ sudo apt-get install git mongodb libffi-dev build-essential python-django python python-dev ...
- c# 线程异步处理
public class AsyncHelper { private static readonly TaskFactory _myTaskFactory = new TaskFactory(Canc ...
- failOnMissingWebXml
使用maven创建项目时有时在pom.xml的war处出现failOnMissingWebXml的错误,根据错误提示的原因可以知道项目是web项目,打包时打成war包. 如果项目里没有web.xml, ...
- 本地文件上传到Linux服务器
1.从服务器上下载文件scp username@servername:/path/filename /var/www/local_dir(本地目录) 例如scp root@192.168.0.101: ...
- Vue的基础学习
一.Vue的计算属性:get和set属性 <!DOCTYPE html> <html lang="en"> <head> <meta ch ...