// This class is deployed as an assembly consisting of one DLL, 
// called HelloWorld.dll.
using System;
public class HelloWorld {
   // Constant Hello World string.
   private const String m_helloWorld = "Hello World";
   // Default public constructor.
   public HelloWorld() {
   }
   // Print "Hello World" plus the passed text.
   public void PrintHello(String txt) {
      // Output to the Console.
      Console.WriteLine(m_helloWorld + " " + txt);
   }
}// Illustrates reflection's late binding functionality.
// Calls the PrintHello method on a dynamically loaded 
// and created instance of the HelloWorld class.
using System;
using System.Reflection;
public class CSharpLateHello {
   public static void Main() {
      // Load the assembly to use.
      Assembly assem = Assembly.Load("HelloWorld");
      // Get the type to use from the assembly.
      Type helloType = assem.GetType("HelloWorld");
      // Get the method to call from the type.
      MethodInfo printMethod = helloType.GetMethod("PrintHello");
      // Create an instance of the HelloWorld class.
      Object obj = Activator.CreateInstance(helloType);
      // Create the args array.
      Object[] args = new Object[1];
      // Set the arguments.
      args[0] = "From CSharp Late Bound";
      // Invoke the PrintHello method.
      printMethod.Invoke(obj, args);
   }
}
InvokeMember 和 CreateInstance
使用 Type.InvokeMember 可调用类型的成员。各个类(如 System.Activator 和 System.Reflection.Assembly)的 CreateInstance 方法是特殊形式的 InvokeMember,它们可新建特定类型的实例。Binder 类用于在这些方法中进行重载决策和参数强制。以下代码示例显示参数强制(类型强制)和成员选择三种可能的组合。在第 1 种情况中,不需要任何参数强制或成员选择。在第 2 种情况中,只需要成员选择。在第 3 种情况中,只需要参数强制。[C#]
public class CustomBinderDriver
{
   public static void Main (string[] arguments)
   {
   Type t = typeof (CustomBinderDriver);
   CustomBinder binder = new CustomBinder();
   BindingFlags flags = BindingFlags.InvokeMethod|BindingFlags.Instance|
      BindingFlags.Public|BindingFlags.Static;   //Case 1. Neither argument coercion nor member selection is needed.
   args = new Object[] {};
   t.InvokeMember ("PrintBob", flags, binder, null, args);   //Case 2. Only member selection is needed.
   args = new Object[] {42};
   t.InvokeMember ("PrintValue", flags, binder, null, args);   //Case 3. Only argument coercion is needed.
   args = new Object[] {"5.5"};
   t.InvokeMember ("PrintNumber", flags, binder, null, args);
   }   public static void PrintBob ()
   {
      Console.WriteLine ("PrintBob");
   }   public static void PrintValue (long value)
   {
      Console.WriteLine ("PrintValue ({0})", value);
   }
   public static void PrintValue (String value)
   {
      Console.WriteLine ("PrintValue\"{0}\")", value);
   }
   
   public static void PrintNumber (double value)
   {
      Console.WriteLine ("PrintNumber ({0})", value);
   }
}两种方法!!