static void Main_ObjectInstance(string[] args) { //有了一个类型对象后(Type的派生类实例如RuntimeType实例), 如何用他创建一个对象 Version v = typeof(System.Object).Assembly.GetName().Version; string asb = "System.Messaging, PublicKeyToken=b03f5f7f11d50a3a, Culture=neutral, Version=" + v.ToString(); Assembly msxml = Assembly.Load(asb); Type[] types = msxml.GetExportedTypes(); Console.WriteLine("All types defined in System.Messaging.dll:"); foreach (Type ty in types) { Console.WriteLine(ty.FullName); } Console.WriteLine(Environment.NewLine); Type t = types[types.Length - 5]; string assemblyName = t.Assembly.FullName; string typename = t.FullName; Console.WriteLine(typename); Console.WriteLine(assemblyName); Console.WriteLine(Environment.NewLine); //- object m1 = System.Activator.CreateInstance(t); //Type参数及ctor参数 Console.WriteLine("m1 : " + m1.GetType()); //- //ObjectHandle oh = Activator.CreateComInstanceFrom(assemblyName, typename); //TODO 怎么传 //object m2 = oh.Unwarp(); //- AppDomain ad = AppDomain.CurrentDomain; object m3 = ad.CreateInstanceAndUnwrap(assemblyName, typename); Console.WriteLine("m3 : " + m3.GetType()); //- //object m4 = t.InvokeMember(); //- //object m5 = t.GetConstructor().Invoke(null); //- 数组 int[] arr = (int[])System.Array.CreateInstance(typeof(int), 5); Console.WriteLine("Array : " + arr.GetType()); Console.WriteLine(arr.Length); //- 委托 MyDel md = (MyDel)System.Delegate.CreateDelegate(typeof(MyDel), typeof(Chapter23_Assembly_ObjectInstance).GetMethod("SomeMethod"), true); Console.WriteLine("Delegate : " + md.GetType()); Console.WriteLine(md.GetInvocationList().Length); //- 泛型类型 Type open = typeof(TestGeneraic <,>); Type close = open.MakeGenericType(typeof(string), typeof(int)); object m6 = Activator.CreateInstance(close); Console.WriteLine("m6 : " + m6.GetType()); }