Maison >développement back-end >C++ >Comment la résolution de surcharge de méthode C# gère-t-elle les valeurs nulles lorsque plusieurs constructeurs existent ?
Résolution de surcharge de méthode C# et gestion des valeurs nulles
En programmation orientée objet, la surcharge de méthodes permet l'utilisation de plusieurs méthodes portant le même nom mais des paramètres différents. Lorsqu'un appel de méthode est effectué, la résolution de surcharge détermine la méthode à appeler. Ce système devient particulièrement important lorsqu'il s'agit de valeurs nulles.
Considérez les cours suivants :
<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>
Lors de la création d'une nouvelle instance de EffectOptions
avec une valeur nulle, par exemple :
<code class="language-csharp">EffectOptions options = new EffectOptions(null);</code>
Le processus de résolution de surcharge identifie d'abord tous les constructeurs accessibles :
<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>
Ensuite, supprimez les constructeurs qui ne sont pas applicables en fonction des types de paramètres. En supposant que Point
est un type valeur, les versions "int" et "Point" seront éliminées. Restant :
<code class="language-csharp">public EffectOptions(params object[] options) public EffectOptions(IEnumerable<object> options) public EffectOptions(string name) public EffectOptions(object owner)</code>
Le système de résolution de surcharge considère ensuite le constructeur "params". Puisqu’elle peut être développée ou non, la forme développée est supprimée. Il en résulte le constructeur candidat suivant :
<code class="language-csharp">public EffectOptions(object[] options) public EffectOptions(IEnumerable<object> options) public EffectOptions(string name) public EffectOptions(object owner)</code>
Enfin, identifiez le meilleur candidat. Il s’agit de comparer les spécificités des paramètres formels. « objet » est moins spécifique que tous les autres types, donc la version « objet » est éliminée. IEnumerable<object>
est également moins spécifique que object[]
et est donc éliminé. Il reste deux candidats :
<code class="language-csharp">public EffectOptions(object[] options) public EffectOptions(string name)</code>
Cependant, puisque object[]
n'est ni plus ni moins spécifique que string
, cela entraîne une erreur d'ambiguïté. Le système de résolution de surcharge ne peut finalement 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!