Maison >développement back-end >C++ >Comment la résolution de surcharge de méthode C# gère-t-elle les arguments nuls ?
Gestion des valeurs nulles dans la résolution de surcharge de méthode C#
Lors de la surcharge de plusieurs méthodes avec différents paramètres, le système de résolution de surcharge de méthode déterminera la méthode à appeler en fonction des paramètres fournis. Cependant, lors du passage d'une valeur nulle en paramètre, le système d'analyse suit des règles spécifiques.
Pour comprendre ce processus, considérons une classe nommée EffectOptions
qui a le constructeur suivant :
<code class="language-csharp">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>
Lorsque vous passez une valeur nulle en paramètre, par exemple :
<code class="language-csharp">EffectOptions options = new EffectOptions(null);</code>
Le système d'analyse exclut d'abord tous les constructeurs inaccessibles. Dans ce cas, tous les constructeurs sont accessibles, on passe donc à l’étape suivante.
Ensuite, il identifie tous les constructeurs applicables où chaque paramètre formel a un paramètre correspondant qui est implicitement convertible en type de paramètre formel. Étant donné que les valeurs nulles peuvent être implicitement converties en object
et object[]
, il existe plusieurs constructeurs applicables :
<code class="language-csharp">public EffectOptions(object[] options) public EffectOptions(IEnumerable<object> options) public EffectOptions(string name) public EffectOptions(object owner)</code>
Cependant, si le constructeur params object[]
fonctionne à la fois sous sa forme développée et non développée, la forme développée est ignorée. Cela nous laisse avec :
<code class="language-csharp">public EffectOptions(object[] options) public EffectOptions(IEnumerable<object> options) public EffectOptions(string name) public EffectOptions(object owner)</code>
Enfin, le système détermine les meilleurs candidats applicables en fonction de la spécificité. Dans ce cas, object[]
et string
ont la même spécificité, ce qui entraîne une erreur d'ambiguïté. Le compilateur ne peut pas déterminer quel constructeur appeler.
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!