【C#】Activator.CreateInstance用法

Activator 类
包含用于在本地创建对象类型的方法。 无法继承此类。

简单说 Activator.CreateInstance :使用与指定参数匹配程度最高的构造函数来创建指定类型的实例。
使用Activator.CreateInstance 的实际作用是什么呢?
是因为 想创建一个方法 方法中传入一个类的名称 然后就能返回一个这个类的实例 ,这样的做法让程序有更高的拓展性,
下面附上 项目中使用的例子

public static OperatorAllLoader OpeatorAllLoader = New("OperatorAllLoader") as OperatorAllLoader;

private static List<LoaderBase> InfoList = new List<LoaderBase>();  

  private static LoaderBase New(string type)   

{           

// ReSharper disable once AssignNullToNotNullAttribute     

   LoaderBase loader = Activator.CreateInstance(Type.GetType(type,true)) as LoaderBase; 

       InfoList.Add(loader);

        InfoDict.Add(type, loader);  

      return InfoList[InfoList.Count - 1]; 

扫描二维码关注公众号,回复: 3604361 查看本文章

   }

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 (); 

}

}

}

猜你喜欢

转载自blog.csdn.net/sk_inster/article/details/83109462