0

オーバーロードされたメソッドが呼び出しで使用される C# 仕様のルールを見てきましたが、メソッドが実際にオーバーロードされたメソッドになるために満たす必要がある基準については何も見つからないようです。

これが私のショットです。問題が発生した場合はお知らせください。

これは、アクセス修飾子やジェネリックを考慮していません (私はまだ C# の本を読んでいる初心者です)。

2 つの方法を検討する

  • 両方のメソッドに正しい仮パラメータ リストがあることを確認してください
  • オプション パラメータを必須パラメータとして扱う
  • 型が params 配列の型である 1 つの必須パラメーターのように params を扱います
  • 必須パラメーターの 2 つのリストがあります。
  • (P1、P2、P3、P4) および (Q1、Q2、Q3、Q4)
  • P1 と Q1、P2 と Q2、… はパラメーターのペア
  • メソッドをオーバーロードするには、2 つのメソッドの名前は同じである必要がありますが、パラメーター リストは異なります。

これらのいずれかが false でなければなりません

  • 同じ数のパラメータ
  • 各パラメーター ペアは同じ型である必要があります
  • 各パラメーター ペアには、両方にパラメーター修飾子が含まれているか、両方にパラメーター修飾子が含まれていない必要があります。

例: method(ref int a) と method(out int a) はオーバーロードされたメソッドではありません

  • 両方 1 パラメータ
  • どちらもint型
  • どちらにもパラメーター修飾子があります
4

1 に答える 1

2

通常、「メソッドのオーバーロード」とは、同じ名前(+/-演算子を含む)で引数が異なるメソッドを指します。

「オーバーロード」という用語は、(「メソッドシグネチャ」とは異なり)C#言語に固有のものを意味するように厳密に定義されているわけではありません。定義に近い場所は、おそらくC#4.0仕様のセクション「3.6署名とオーバーロード」です。

シグニチャは、クラス、構造体、およびインターフェイスのメンバーをオーバーロードするためのメカニズムです。

  • メソッドのオーバーロードにより、クラス、構造体、またはインターフェイスが同じ名前の複数のメソッドを宣言できるようになります。ただし、それらの署名がそのクラス、構造体、またはインターフェイス内で一意である場合に限ります。

  • インスタンスコンストラクターのオーバーロードにより、クラスまたは構造体が複数のインスタンスコンストラクターを宣言できるようになります。ただし、それらの署名がそのクラスまたは構造体内で一意である場合に限ります。

  • インデクサーのオーバーロードにより、クラス、構造体、またはインターフェースが複数のインデクサーを宣言できるようになります。ただし、それらの署名がそのクラス、構造体、またはインターフェース内で一意である場合に限ります。

  • 演算子のオーバーロードにより、クラスまたは構造体は、その署名がそのクラスまたは構造体内で一意である場合に、同じ名前の複数の演算子を宣言できます。

于 2012-06-06T00:58:13.323 に答える