Activator.CreateInstanceメソッドを使用すると、型情報を使って動的にインスタンスを作成することができます。 このメソッドではインスタンスを生成する際、コンストラクタに渡す引数を指定することができます。 コンストラクタに渡す引数はobject型の配列で指定します。 指定された引数に応じて適切なコンストラクタが自動的に呼び出されます。 当然、抽象クラスのインスタンスを作成しようとした場合や、引数と一致するコンストラクタがない場合は例外がスローされます。

Activator.CreateInstanceを使って型情報からインスタンスを作成する
using System;
using System.Reflection;

class C {
  private int f;

  public C()
  {
    this.f = 0;
  }

  public C(int f)
  {
    this.f = f;
  }

  public override string ToString()
  {
    return string.Format("f = {0}", f);
  }
}

class Sample {
  static void Main()
  {
    object inst;

    // デフォルト(引数なし)のコンストラクタを使ってクラスCのインスタンスを作成する
    inst = Activator.CreateInstance(typeof(C));

    Console.WriteLine(inst);

    // int型の引数を1つとるコンストラクタを使ってクラスCのインスタンスを作成する
    object[] args = new object[] {42};

    inst = Activator.CreateInstance(typeof(C), BindingFlags.CreateInstance, null, args, null);

    Console.WriteLine(inst);
  }
}
実行結果
f = 0
f = 42