C# メソッド オーバーロードの解決: Null 引数のナビゲート
C# のメソッド オーバーロード解決メカニズムは、複数のメソッドが名前を共有しているが署名が異なる場合に、どのメソッドを呼び出すかを決定します。 このプロセスは、null 引数を扱う場合に特に興味深いものです。
解決プロセス:
アクセス可能なメソッド: システムは最初に、呼び出しに一致するすべてのアクセス可能なメソッドを識別します。
適用できないメソッド: 指定された引数からパラメーターを暗黙的に変換できない場合、メソッドは破棄されます。
params
パラメータの処理: params
ベースのメソッドが展開された形式と展開されていない形式の両方で適用できる場合、展開されたバージョンは無視されます。
ベストマッチの選択: 残りの適用可能なメソッドが「ベストマッチ」として評価されます。 より具体的なタイプは、あまり具体的でないタイプよりも優先されます。
Null 引数フィルタリング: 重要なことに、Null 引数が指定された場合、Null 非許容パラメータを持つメソッドは削除されます。
あいまいさの解決: 同様に固有のメソッドが複数残っている場合、コンパイル時にあいまいさエラーが発生します。
例:
いくつかのオーバーロードされたコンストラクターを含む EffectOptions
クラスを調べてみましょう。
<code class="language-csharp">public class EffectOptions { public EffectOptions(params object[] options) { } public EffectOptions(IEnumerable<object> options) { } public EffectOptions(string name) { } public EffectOptions(object owner) { } public EffectOptions(int count) { } public EffectOptions(Point point) { } }</code>
EffectOptions options = new EffectOptions(null);
を呼び出すと、次の結果が得られます:
int
および Point
コンストラクターは、null
がこれらの null 非許容型に割り当てられないため、直ちに除外されます。object[]
、IEnumerable<object>
、string
、object
。object
と IEnumerable<object>
が排除されます。object[]
と string
が残るため、あいまいさが生じ、コンパイラ エラーが発生します。要約すると、C# のメソッド オーバーロード解決は、まず適用可能なメソッドを識別し、次にパラメーターの型に基づいて null 値と互換性のないメソッドを除外することで、null 引数を体系的に処理します。 このフィルタリング プロセスの後に複数の同様に適切なメソッドが残っている場合、あいまいさが発生します。
以上がメソッドのオーバーロード解決は C# で Null 値をどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。