つまり、名前付き引数は何らかの形で署名のように見えます。名前を使用して名前付きメソッドを呼び出すことはできず、パラメーターの位置を尊重するだけです。ただし、署名と名前が同じで、パラメーターの名前が異なる 2 つのメソッドを作成することはできません。
インターフェイスは、クラスのメソッドに特定のパラメーターの名前を使用させることができますか?
名前付き引数の使用:
int i = Function(NamedArgument: x);
名前付き引数を使用しない:
int i = 関数 (x);
つまり、名前付き引数は何らかの形で署名のように見えます。名前を使用して名前付きメソッドを呼び出すことはできず、パラメーターの位置を尊重するだけです。ただし、署名と名前が同じで、パラメーターの名前が異なる 2 つのメソッドを作成することはできません。
インターフェイスは、クラスのメソッドに特定のパラメーターの名前を使用させることができますか?
名前付き引数の使用:
int i = Function(NamedArgument: x);
名前付き引数を使用しない:
int i = 関数 (x);
パラメータ名は、一意性制約の観点から署名の一部ではありません。
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