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
Libérer: 2025-01-16 15:38:09
original
685 Les gens l'ont consulté

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>
Copier après la connexion

Lorsque vous passez une valeur nulle en paramètre, par exemple :

<code class="language-csharp">EffectOptions options = new EffectOptions(null);</code>
Copier après la connexion

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>
Copier après la connexion
Copier après la connexion

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>
Copier après la connexion
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal