【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];
}
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 ();
}
}
}