Heim > Backend-Entwicklung > C++ > Wie geht die C#-Methodenüberladungsauflösung mit Nullargumenten um?

Wie geht die C#-Methodenüberladungsauflösung mit Nullargumenten um?

Linda Hamilton
Freigeben: 2025-01-16 15:38:09
Original
685 Leute haben es durchsucht

How Does C# Method Overload Resolution Handle Null Arguments?

Nullwertbehandlung bei der C#-Methodenüberladungsauflösung

Wenn mehrere Methoden mit unterschiedlichen Parametern überladen werden, bestimmt das System zur Auflösung von Methodenüberladungen anhand der bereitgestellten Parameter, welche Methode aufgerufen werden soll. Wenn jedoch ein Nullwert als Parameter übergeben wird, folgt das Parsing-System bestimmten Regeln.

Um diesen Prozess zu verstehen, betrachten Sie eine Klasse namens EffectOptions, die den folgenden Konstruktor hat:

<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>
Nach dem Login kopieren

Wenn Sie einen Nullwert als Parameter übergeben, zum Beispiel:

<code class="language-csharp">EffectOptions options = new EffectOptions(null);</code>
Nach dem Login kopieren

Das Parsing-System schließt zunächst alle unzugänglichen Konstruktoren aus. In diesem Fall sind alle Konstruktoren zugänglich, daher fahren wir mit dem nächsten Schritt fort.

Als nächstes werden alle anwendbaren Konstruktoren identifiziert, bei denen jeder formale Parameter einen entsprechenden Parameter hat, der implizit in den formalen Parametertyp konvertierbar ist. Da Nullwerte implizit in object und object[] konvertiert werden können, gibt es mehrere anwendbare Konstruktoren:

<code class="language-csharp">public EffectOptions(object[] options)
public EffectOptions(IEnumerable<object> options)
public EffectOptions(string name)
public EffectOptions(object owner)</code>
Nach dem Login kopieren
Nach dem Login kopieren

Wenn der params object[]-Konstruktor jedoch sowohl in seiner erweiterten als auch in seiner nicht erweiterten Form funktioniert, wird die erweiterte Form verworfen. Damit bleibt uns Folgendes übrig:

<code class="language-csharp">public EffectOptions(object[] options)
public EffectOptions(IEnumerable<object> options)
public EffectOptions(string name)
public EffectOptions(object owner)</code>
Nach dem Login kopieren
Nach dem Login kopieren

Abschließend ermittelt das System anhand der Spezifität die am besten geeigneten Kandidaten. In diesem Fall haben object[] und string die gleiche Spezifität, was zu einem Mehrdeutigkeitsfehler führt. Der Compiler kann nicht bestimmen, welcher Konstruktor aufgerufen werden soll.

Das obige ist der detaillierte Inhalt vonWie geht die C#-Methodenüberladungsauflösung mit Nullargumenten um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage