パラメータ名は、一意性制約の観点から署名の一部ではありません。
C# 4 仕様のセクション 3.6 から:
メソッドのシグネチャは、メソッドの名前、型パラメーターの数、および各仮パラメーターの型と種類 (値、参照、または出力) で構成され、左から右の順序で考慮されます。これらの目的のために、仮パラメーターの型で発生するメソッドの型パラメーターは、その名前ではなく、メソッドの型引数リスト内の序数位置によって識別されます。メソッドのシグネチャには、戻り値の型、一番右のパラメーターに指定できる params 修飾子、オプションの型パラメーターの制約は含まれません。
ただし、パラメーター名は、コンパイラーがメソッドについて「知っている」ものの一部です。名前付き引数に使用されるため、メタデータで伝播する必要がある情報です。
インターフェイスは、クラスのメソッドに特定のパラメーターの名前を使用するように強制できますか?
いいえ。実際、非常に紛らわしいコードが発生する可能性があります。
interface IFoo
{
public int M(int x, int y);
}
public class Foo : IFoo
{
public int M(int y, int x)
{
return x - y;
}
}
...
Foo foo = new Foo();
IFoo ifoo = foo;
Console.WriteLine(foo.M(x: 10, y: 3)); // Prints 7
Console.WriteLine(ifoo.M(x: 10, y: 3)); // Prints -7