Maison >développement back-end >C++ >Comment la résolution de surcharge de méthode C# gère-t-elle les arguments nuls ?

Comment la résolution de surcharge de méthode C# gère-t-elle les arguments nuls ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-16 15:38:09686parcourir

How Does C# Method Overload Resolution Handle Null Arguments?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn