Activator.CreateInstance

IObject
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ActivatorLibrary { public interface IObject { void PrintName(); } }
ClassExam
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ActivatorLibrary { public class ClassExam:IObject { private string name = "default name"; public ClassExam() { } public ClassExam(string name) { this.name = name; } public void PrintName() { Console.WriteLine(this.name); } } }
Main
using ActivatorLibrary; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { IObject obj1 = (IObject)Activator.CreateInstance(Type.GetType("ActivatorLibrary.ClassExam,ActivatorLibrary")); obj1.PrintName(); IObject obj2 = (IObject)Activator.CreateInstance(Type.GetType("ActivatorLibrary.ClassExam,ActivatorLibrary"), new object[] { "seted new name" }); obj2.PrintName(); Console.ReadKey(); } } }
获取类型的方法是通过Type.GetType以及Assembly.GetType方法,如:
Type t = Type.GetType(“System.String”);
需要注意的是,前面我们讲到了命名空间和装配件的关系,要查找一个类,必须指定它所在的装配件,或者在已经获得的Assembly实例上面调用GetType。
本装配件中类型可以只写类型名称,另一个例外是mscorlib.dll,这个装配件中声明的类型也可以省略装配件名称(.Net装配件编译的时候,默认都引用了mscorlib.dll,除非在编译的时候明确指定不引用它),比如:
System.String是在mscorlib.dll中声明的,上面的Type t = Type.GetType(“System.String”)是正确的
System.Data.DataTable是在System.Data.dll中声明的,那么:
Type.GetType(“System.Data.DataTable”)就只能得到空引用。
必须:
Type t = Type.GetType("System.Data.DataTable,System.Data,Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");

浙公网安备 33010602011771号