C# Activator.CreateInstance
Activator 类
包含用于在本地创建对象类型的方法。 无法继承此类。
简单说 Activator.CreateInstance :使用与指定参数匹配程度最高的构造函数来创建指定类型的实例。
使用Activator.CreateInstance 的实际作用是什么呢?
是因为 想创建一个方法 方法中传入一个类的名称 然后就能返回一个这个类的实例 ,这样的做法让程序有更高的拓展性
//IObjcet.cs namespace Net.BLL.ActivatorCreateInstance { public interface IObjcet { string printName(); } }
//ClassExam.cs namespace Net.BLL.ActivatorCreateInstance { public class ClassExam : IObjcet { private string name = "default name"; public ClassExam() { } public ClassExam(string name) { this.name = name; } public string printName() { var result = string.Empty; result += "" + this.ToString() + "'s name is:"; result += "" + this.name; return result; } } }
//TestCall.cs using System; namespace Net.BLL.ActivatorCreateInstance { public class TestCall { /* Activator 类 包含用于在本地创建对象类型的方法。 无法继承此类。 简单说 Activator.CreateInstance :使用与指定参数匹配程度最高的构造函数来创建指定类型的实例。 使用Activator.CreateInstance 的实际作用是什么呢? 是因为 想创建一个方法 方法中传入一个类的名称 然后就能返回一个这个类的实例 ,这样的做法让程序有更高的拓展性, */ public void Call() { //用传递参数来得到一个类的实例 string itemType = "ClassExam"; string assembleyName = this.GetType().Assembly.GetName().Name;//Net.BLL string nameSpace = this.GetType().Namespace; //用Activator .CreateInstance创建函数实例,默认的不带参数的构造函数 IObjcet obj = (IObjcet)Activator.CreateInstance(Type.GetType($"{nameSpace}.{itemType},{assembleyName}"), null); //System.Type .GetType 命名空间.类名,程序集 //Net.BLL.ActivatorCreateInstance.ClassExam var res01 = obj.printName(); //调用ClassExam类的另一个带参数构造函数 IObjcet obj2 = (IObjcet)System.Activator.CreateInstance(Type.GetType($"{nameSpace}.{itemType},{assembleyName}"), new string[] { "seted new name" }); var res02 = obj2.printName(); } } }
//UnitTest1.cs [TestMethod] public void Test() { TestCall tc = new TestCall(); tc.Call(); }
另一个示例,当前类操作
namespace BLL.FraudScore.Tests { [TestClass()] public class BpFraudScoreTests { long queryRecordId { get; set; } PersonalCreditReport personalCreditReport { get; set; } QueryParameters parameters { get; set; } [TestInitialize] public void Initialize() { queryRecordId = 88888; parameters = new QueryParameters() { ApplicantName = "张某某", ApplicationNumber = "111111111111", IdentifyNumber = "11010819931010444X", IdentifyType = 1000115 }; } [TestMethod()] public void Test() { string itemType = "BpFraudScoreTests"; string assembleyName = this.GetType().Assembly.GetName().Name;//UnitTest string nameSpace = this.GetType().Namespace;//BLL.FraudScore.Tests var temp01 = Type.GetType($"{nameSpace}.{itemType},{assembleyName}");//{Name = "BpFraudScoreTests" FullName = "BLL.FraudScore.Tests.BpFraudScoreTests"} BpFraudScoreTests temp02 = (BpFraudScoreTests)Activator.CreateInstance(temp01, null); temp02.Initialize();//初始化方法 var t01 = temp02.queryRecordId;//任意变量 var t02 = temp02.parameters;//任意变量 var t03 = temp02.personalCreditReport;//任意变量 } } }