Heim > Backend-Entwicklung > C++ > Wie geht die C#-Methodenüberladungsauflösung mit Nullwerten um, wenn mehrere Konstruktoren vorhanden sind?

Wie geht die C#-Methodenüberladungsauflösung mit Nullwerten um, wenn mehrere Konstruktoren vorhanden sind?

DDD
Freigeben: 2025-01-16 15:12:10
Original
609 Leute haben es durchsucht

How Does C# Method Overload Resolution Handle Null Values When Multiple Constructors Exist?

C#-Methodenüberladungsauflösung und Nullwertbehandlung

Bei der objektorientierten Programmierung ermöglicht die Methodenüberladung die Verwendung mehrerer Methoden mit demselben Namen, aber unterschiedlichen Parametern. Wenn ein Methodenaufruf erfolgt, bestimmt die Überladungsauflösung, welche Methode aufgerufen werden soll. Besonders wichtig wird dieses System beim Umgang mit Nullwerten.

Berücksichtigen Sie die folgenden Kurse:

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

Beim Erstellen einer neuen Instanz von EffectOptions mit einem Nullwert, zum Beispiel:

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

Der Überladungsauflösungsprozess identifiziert zunächst alle zugänglichen Konstruktoren:

<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

Als nächstes verwerfen Sie Konstruktoren, die aufgrund der Parametertypen nicht anwendbar sind. Angenommen, Point ist ein Werttyp, werden die Versionen „int“ und „Point“ eliminiert. Verbleibend:

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

Das Überlastungsauflösungssystem berücksichtigt dann den „params“-Konstruktor. Da es erweitert werden kann oder nicht, wird die erweiterte Form verworfen. Dies führt zu dem folgenden Kandidatenkonstruktor:

<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

Identifizieren Sie abschließend den besten Kandidaten. Dabei werden die Besonderheiten formaler Parameter verglichen. „Objekt“ ist weniger spezifisch als alle anderen Typen, daher wird die „Objekt“-Version eliminiert. IEnumerable<object> ist außerdem weniger spezifisch als object[] und wird daher eliminiert. Es verbleiben noch zwei Kandidaten:

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

Da object[] jedoch weder mehr noch weniger spezifisch ist als string, führt dies zu einem Mehrdeutigkeitsfehler. Das Überlastungsauflösungssystem kann letztendlich nicht bestimmen, welcher Konstruktor aufgerufen werden soll.

Das obige ist der detaillierte Inhalt vonWie geht die C#-Methodenüberladungsauflösung mit Nullwerten um, wenn mehrere Konstruktoren vorhanden sind?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage