メソッドではオーバーロードによって同じ名前のメソッドが複数存在する場合があり、また特にコンストラクタのオーバーロードではコンストラクタは名前を持たないため、名前だけでなく引数リストを用いて対象のオーバーロードを指定する必要があります。

例えばGetMethodの場合、名前のみでメソッドを取得しようとしたときにオーバーロードが複数存在する場合は、例外AmbiguousMatchExceptionがスローされます。

このようにメンバ名だけでは単一のメンバを限定できない場合は、引数リストを指定することによって取得対象を限定することができます。

引数リストは次の例のようにTypeの配列で指定します。 引数がない場合は空の配列か、Type.EmptyTypesフィールドを指定します。 引数の型・数・順序のすべてに一致するものがなければnull/Nothingが返されます。

引数リストを指定して一致するコンストラクタを取得する
using System;
using System.Reflection;

class C {
  public C(int x) {}
  public C(string x, int y) {}
  public C() {}
}

class Sample {
  static void Main()
  {
    var t = typeof(C);

    // int型の引数を一つとるコンストラクタを取得する
    var ctor1 = t.GetConstructor(new[] {typeof(int)});

    // string型とint型の引数をとるコンストラクタを取得する
    var ctor2 = t.GetConstructor(new[] {typeof(string), typeof(int)});

    // 引数のないコンストラクタを取得する
    var ctor3 = t.GetConstructor(Type.EmptyTypes);

    Console.WriteLine(ctor1);
    Console.WriteLine(ctor2);
    Console.WriteLine(ctor3);
  }
}
実行結果
Void .ctor(Int32)
Void .ctor(String, Int32)
Void .ctor()

ジェネリックメソッドなど、型パラメータによってメンバを限定する必要がある場合については§.型パラメータを指定した取得 (ジェネリック型のメソッド/ジェネリックメソッドの取得)を参照してください。