用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实现类的实例化(转)

时间: 2024-08-02 09:13:49

用Activator.CreateInstance代替new实现类的实例化(转)的相关文章

C# Activator.CreateInstance 动态创建类的实例(二)

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Kernel.Interface { public interface IObjcet { void Put(); void Put(string plus); } } using System; using System.Collections.

C# Activator.CreateInstance 动态创建类的实例(一)

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Kernel.SimpleLibrary { public class Person { private string name; public Person(){ } public Person(string name) { this.name

C# Activator.CreateInstance()方法使用

本文来自:http://blog.csdn.net/jaydawson/article/details/5539438 C#在类工厂中动态创建类的实例,所使用的方法为: 1. Activator.CreateInstance (Type) 2. Activator.CreateInstance (Type, Object[])   两种方法区别仅为:创建无参数的构造方法和创建有参数的构造函数. //Activator.CreateInstance(Type) object result = nu

Activator.CreateInstance 方法 (Type) 的用法

转自:http://www.cnblogs.com/lmfeng/archive/2012/01/30/2331666.html Activator.CreateInstance 方法 (Type) 的用法 Activator.CreateInstance 方法 (Type) 使用与指定参数匹配程度最高的构造函数来创建指定类型的实例. 命名空间:System程序集:mscorlib(在 mscorlib.dll 中) C# public static Object CreateInstance

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(vF

笔记 Activator.CreateInstance(Type)

这段代码取自NopCommerce 3.80 的 权限列表初始化代码 dynamic provider = Activator.CreateInstance(providerType); ? 文件位置 Presentation\Nop.Web\Controllers\InstallController.cs ? ? //register default permissions //var permissionProviders = EngineContext.Current.Resolve<IT

Python3基础 类的组合 把类的实例化放到一个新类里面

镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.------------------------------------------ code: class Girls: def __init__(self,num): self.num=num class OurClass: #组合,其他类的实例化,在这里类的实例化中进行 def __init__(self,boyNum,girlNum): self.boys=Boys

创建Java类并实例化的基本过程

1 package com.sanguosha.java; 2 /* 3 * 面向对象实现的过程 4 * 1.创建类并设计类的成员(成员变量即属性and成员方法即方法) 5 * 2.通过类来创建类的对象,也称类的实例化 6 * 3.通过(对象.属性)和(对象.方法)调用,完成相应的功能 7 */ 8 public class Zoo { 9 public static void main(String[] args) { 10 //基本数据类型的实例化 11 int n=10; 12 //数组的

C++类的实例化对象的大小之sizeof()

之所以写这篇<C++类的实例化对象的大小之sizeof()>,是因为在参加笔试的时候遇到如下这么一道题,当时感觉就是这个一个坑,但,我还是义无反顾的跳了下去,因为存在知识点盲区啊.现,总结一下,你不知道的C++类的实例化对象的大小之sizeof(). class D { public: D() { } virtual ~D() { } private: int a ; char *p; }; 实例一: class A { }; A a; cout << sizeof(a) <