Résolution de surcharge de méthode C# : navigation dans les arguments nuls
Le mécanisme de résolution de surcharge de méthode de C# détermine la méthode à appeler lorsque plusieurs méthodes partagent un nom mais diffèrent dans leurs signatures. Le processus est particulièrement intéressant lorsqu'il s'agit d'arguments nuls.
Le processus de résolution :
Méthodes accessibles : Le système identifie dans un premier temps toutes les méthodes accessibles correspondant à l'appel.
Méthodes inapplicables : Les méthodes sont ignorées si leurs paramètres ne peuvent pas être implicitement convertis à partir des arguments fournis.
params
Gestion des paramètres : Si une méthode basée sur params
est applicable à la fois dans ses formes développée et non développée, la version développée est ignorée.
Sélection de la meilleure correspondance : Les méthodes applicables restantes sont évaluées pour la « meilleure correspondance ». Les types plus spécifiques sont préférés aux types moins spécifiques.
Filtrage des arguments nuls : Il est crucial que les méthodes avec des paramètres non nullables soient éliminées lorsqu'un argument nul est fourni.
Résolution d'ambiguïté : Si plusieurs méthodes tout aussi spécifiques subsistent, une erreur d'ambiguïté au moment de la compilation se produit.
Exemple illustratif :
Examinons la classe EffectOptions
avec plusieurs constructeurs surchargés :
<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>
Invoquer EffectOptions options = new EffectOptions(null);
conduit à ce qui suit :
int
et Point
sont immédiatement exclus car null
n'est pas attribuable à ces types non nullables.object[]
, IEnumerable<object>
, string
et object
.object
et IEnumerable<object>
.object[]
et string
restent, présentant une ambiguïté, entraînant une erreur du compilateur.En résumé, la résolution de surcharge de méthodes de C# gère systématiquement les arguments nuls en identifiant d'abord les méthodes applicables, puis en filtrant celles incompatibles avec les valeurs nulles en fonction des types de paramètres. Une ambiguïté surgit lorsqu'il reste plusieurs méthodes également appropriées après ce processus de filtrage.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!