一TypeExployer
class Program

...{
static void Main(string[] args)

...{
//ExploreSystemObject();
ExploreStringConstructor();
Console.ReadLine();
}
static void ExploreSystemObject()

...{
Type t = Type.GetType("System.Object");
Console.WriteLine("FullName: " + t.FullName);
Console.WriteLine("AssemblyQualifiedName: " + t.AssemblyQualifiedName);
Console.WriteLine("GUID: " + t.GUID);
Console.WriteLine("IsAbstract: " + t.IsAbstract);
Console.WriteLine("IsClass: " + t.IsClass);
Console.WriteLine("IsInterface: " + t.IsInterface);
Console.WriteLine("IsSealed: " + t.IsSealed);
MemberInfo[] members = t.GetMembers();
foreach (MemberInfo m in members)

...{
Console.WriteLine(" {0}", m);
}
}
static void ExploreStringConstructor()

...{
Type t = Type.GetType("System.String");
Console.WriteLine("FullName: " + t.FullName);
Console.WriteLine("AssemblyQualifiedName: " + t.AssemblyQualifiedName);
Console.WriteLine("GUID: " + t.GUID);
Console.WriteLine("IsAbstract: " + t.IsAbstract);
Console.WriteLine("IsClass: " + t.IsClass);
Console.WriteLine("IsInterface: " + t.IsInterface);
Console.WriteLine("IsSealed: " + t.IsSealed);
ConstructorInfo[] constructorArray = t.GetConstructors();
Console.WriteLine("Constructors: " + constructorArray.Length);
foreach (ConstructorInfo c in constructorArray)

...{
Console.WriteLine(" {0}", c);
ParameterInfo[] parameterArray = c.GetParameters();
foreach (ParameterInfo p in parameterArray)

...{
Console.WriteLine(" {0}", p.Name);
}
}
}
}
二 DynamicInvocation
class Program

...{
static void Main(string[] args)

...{
Type t = typeof(Employee);

object[] ctorParams = ...{ "qiuwh", "RDCenter" };
Object o = Activator.CreateInstance(t, ctorParams);
MethodInfo myMethod = t.GetMethod("ToString");
Console.WriteLine(myMethod.Invoke(o, null));
Console.ReadLine();
}
}
class Employee

...{
public string Name;
public string Dept;
public Employee(string name, string dept)

...{
this.Name = name;
this.Dept = dept;
}
public override string ToString()

...{
return string.Format("Name:{0}, Dept:{1}", this.Name, this.Dept);
}
}
三 DynamicCreateType
class Program

...{
static void Main(string[] args)

...{
CreateType();
Console.ReadLine();
}
static void CreateType()

...{
AssemblyName assemblyName = new AssemblyName("MyAssembly");
AssemblyBuilder assemblyBuilder = Thread.GetDomain().DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.RunAndSave);
ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("MyModule", "MyAssembly.dll", true);
TypeBuilder typeBuilder = moduleBuilder.DefineType("Sample.NewType", TypeAttributes.Public);
MethodBuilder methodBuilder = typeBuilder.DefineMethod("MyMethod", MethodAttributes.Public, null, null);
CreateMethodBody(methodBuilder);
typeBuilder.CreateType();
assemblyBuilder.Save("MyAssembly.dll");
Type t = Type.GetType("Sample.NewType, MyAssembly", true);
Object o = Activator.CreateInstance(t);
MethodInfo myMethod = t.GetMethod("MyMethod");
Console.WriteLine(myMethod.Invoke(o, null));
}
static void CreateMethodBody(MethodBuilder m)

...{
ILGenerator il = m.GetILGenerator();
il.EmitWriteLine("Hello World! from a new type");
il.Emit(OpCodes.Ret);
}
}
四 AssemblyExplorer
class Program
{
/*
* 动态载入dll,判断此assembly中哪些类属于 System.Web.UI 命名空间下,
* 并且扩展了IDisposable接口,打印出这些类以及他们的所有接口。
*/
static void Main(string[] args)
{
Assembly assembly = Assembly.LoadFrom(@"C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/System.Web.dll");
Type[] types = assembly.GetTypes();
foreach (Type type in types)
{
if ("System.Web.UI".Equals(type.Namespace) && type.IsClass && type.GetInterface("IDisposable") != null)
{
Console.WriteLine("Class Name:" + type.FullName);
Type[] TypeInterfaces = type.GetInterfaces();
foreach (Type TypeInterface in TypeInterfaces)
{
Console.WriteLine(TypeInterface.Name);
}
Console.WriteLine();
}
}
Console.ReadLine();
}
}