Heim >Backend-Entwicklung >C++ >Wie geht die C#-Methodenüberladungsauflösung mit Nullargumenten um?
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>
Wenn Sie einen Nullwert als Parameter übergeben, zum Beispiel:
<code class="language-csharp">EffectOptions options = new EffectOptions(null);</code>
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>
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>
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!