Was halten Sie von out und ref in C#? Entdecken Sie die Unterschiede zwischen ihnen

php是最好的语言
Freigeben: 2018-08-02 16:23:12
Original
1856 Leute haben es durchsucht

Wenn Sie C# lernen, werden Sie immer auf einige Sprachbefehle stoßen, die eine ähnliche, aber unterschiedliche Verwendung haben. Heute werden wir den Unterschied zwischen out und ref in C# besprechen. Im Folgenden fasse ich den Unterschied zwischen out und ref zusammen. Apache PHP MySQL

Beide werden über die Adresse übergeben und die Werte der ursprünglichen Parameter werden nach der Verwendung geändert.

ref kann den Wert des Parameters an die Funktion übergeben, aber out muss den Parameter löschen, was bedeutet, dass Sie keinen Wert von out übergeben können. Nachdem out eingegangen ist, ist der Wert des Parameters leer. Sie müssen also einmal initialisieren. Dies ist der Unterschied zwischen den beiden, oder wie einige Internetnutzer sagten, „ref“ bedeutet sowohl rein als auch raus, während „out“ nur rausgehen, aber nicht rein bedeutet.

ref (C#-Referenz) Das Schlüsselwort

ref bewirkt, dass Parameter als Referenz übergeben werden. Der Effekt besteht darin, dass bei der Rückgabe der Kontrolle an die aufrufende Methode alle Änderungen an den Parametern in der Methode in der Variablen widergespiegelt werden. Um Ref-Parameter zu verwenden, müssen sowohl die Methodendefinition als auch der Methodenaufruf explizit das Schlüsselwort ref verwenden.

Zum Beispiel:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

class RefExample

{

    static void Method(ref int i)

    {

        i = 44;

    }

 

    static void Main()

    {

        int val = 0;

        Method(ref val);

        // val is now 44

    }

}

1

2

3

1

2

3

4

5

6

7

class CS0663_Example

{

    // Compiler error CS0663: "cannot define overloaded

    // methods that differ only on ref and out".

    public void SampleMethod(ref int i) { }

    public void SampleMethod(out int i) { }

}

4

1

2

3

4

5

class RefOutOverloadExample

{

    public void SampleMethod(int i) { }

    public void SampleMethod(ref int i) { }

}

5 6 7 8 9 10 11 12 13 14
Klasse RefExample { static void Method(ref int i) { i = 44; } statisch void Main() { int val = 0; Methode(ref val); // val ist jetzt 44 } }
Die an den ref-Parameter übergebenen Parameter müssen zuerst initialisiert werden. Dies unterscheidet sich von out , dessen Parameter vor der Übergabe nicht explizit initialisiert werden müssen. Obwohl ref und out zur Laufzeit unterschiedlich behandelt werden, werden sie zur Kompilierungszeit gleich behandelt. Wenn daher eine Methode einen Ref-Parameter und eine andere Methode einen Out-Parameter akzeptiert, können beide Methoden nicht überladen werden. Beispielsweise sind die beiden Methoden im folgenden Code aus Kompilierungsperspektive identisch, sodass der folgende Code nicht kompiliert werden kann:
1 2 3 4 5 6 7 class CS0663_Example { // Compiler-Fehler CS0663: „Überladen kann nicht definiert werden // Methoden, die sich nur bei ref und out unterscheiden". public void SampleMethod(ref int i) { } public void SampleMethod(out int i) { } }
Wenn jedoch eine Methode ref- oder out-Parameter annimmt und eine andere Methode diese beiden Parameter nicht annimmt, kann sie überladen werden, wie im folgenden Beispiel gezeigt:
1 2 3 4 5 class RefOutOverloadExample { public void SampleMethod(int i) { } public void SampleMethod(ref int i) { } }

out (C#-Referenz) Das Schlüsselwort

out bewirkt, dass Parameter als Referenz übergeben werden. Dies ähnelt dem Schlüsselwort ref, außer dass ref erfordert, dass die Variable vor der Übergabe initialisiert werden muss. Um Out-Parameter zu verwenden, müssen sowohl die Methodendefinition als auch der Methodenaufruf explizit das Out-Schlüsselwort verwenden.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

class OutExample

{

    static void Method(out int i)

    {

        i = 44;

    }

 

    static void Main()

    {

        int value;

        Method(out value);

        // value is now 44

    }

}

1

2

3

1

2

3

4

5

6

7

class CS0663_Example

{

    // Compiler error CS0663: "Cannot define overloaded

    // methods that differ only on ref and out".

    public void SampleMethod(out int i) { }

    public void SampleMethod(ref int i) { }

}

4

1

2

3

4

5

class RefOutOverloadExample

{

    public void SampleMethod(int i) { }

    public void SampleMethod(out int i) { }

}

5 6 7 8 9 10 11 12 13 14
class OutExample { static void Method(out int i) { i = 44; } statisch void Main() { int value; Methode(out wert); // Wert ist jetzt 44 } }
Obwohl als Out-Parameter übergebene Variablen vor der Übergabe nicht initialisiert werden müssen, muss die Methode aufgerufen werden, damit ihr ein Wert zugewiesen werden kann, bevor die Methode zurückkehrt. Ref- und Out-Schlüsselwörter werden zur Laufzeit unterschiedlich gehandhabt, zur Kompilierungszeit jedoch auf die gleiche Weise. Wenn daher eine Methode einen Ref-Parameter und eine andere Methode einen Out-Parameter akzeptiert, können beide Methoden nicht überladen werden. Beispielsweise sind die beiden Methoden im folgenden Code aus Kompilierungsperspektive identisch, sodass der folgende Code nicht kompiliert werden kann:
1 2 3 4 5 6 7 Klasse CS0663_Example { // Compilerfehler CS0663: „Überladen kann nicht definiert werden // Methoden, die sich nur bei ref und out unterscheiden". public void SampleMethod(out int i) { } public void SampleMethod(ref int i) { } }
Wenn jedoch eine Methode ref- oder out-Parameter akzeptiert und eine andere Methode diese beiden Parametertypen nicht akzeptiert, kann sie wie folgt überladen werden: 1 2 3 4 5 class RefOutOverloadExample { public void SampleMethod(int i) { } public void SampleMethod(out int i) { } }

Das Folgende habe ich basierend auf meiner Erfahrung zusammengestellt:

Unterschied

Der Unterschied zwischen ref und out In C# können Parameter als Wert oder per übergeben werden Referenz . Durch die Übergabe von Parametern als Referenz können Funktionsmitglieder den Wert des Parameters ändern und diese Änderung beibehalten. Um Parameter per Referenz zu übergeben, verwenden Sie das Schlüsselwort ref oder out. Sowohl die Schlüsselwörter ref als auch out können ähnliche Funktionen bereitstellen und funktionieren ähnlich wie Zeigervariablen in C. Der Unterschied zwischen ihnen ist:

1. Bei Verwendung von Ref-Typ-Parametern müssen die übergebenen Parameter zuerst initialisiert werden. Für out muss es in der Methode initialisiert werden.

2. Wenn Sie ref und out verwenden, müssen Sie das Schlüsselwort Ref oder Out in den Parametern der Methode und bei der Ausführung der Methode hinzufügen. um das Spiel zu befriedigen.

3. out eignet sich für den Einsatz, bei dem mehrere Rückgabewerte erneut ausgeführt werden müssen, während ref verwendet wird, wenn die aufgerufene Methode die Referenz des Aufrufers ändern muss.

Das Methodenparameter-Schlüsselwort out für einen Methodenparameter bewirkt, dass die Methodenreferenz an dieselbe Variable der Methode übergeben wird. Alle an den Parametern in der Methode vorgenommenen Änderungen werden in dieser Variablen widergespiegelt, wenn die Steuerung an die aufrufende Methode zurückgegeben wird.

Das Deklarieren einer Out-Methode ist nützlich, wenn die Methode mehrere Werte zurückgeben soll. Methoden, die Out-Parameter verwenden, können dennoch einen Wert zurückgeben. Eine Methode kann mehr als einen Out-Parameter haben.

Um Out-Parameter zu verwenden, müssen die Parameter explizit als Out-Parameter an die Methode übergeben werden. Der Wert des Out-Parameters wird nicht an den Out-Parameter übergeben.

Variablen, die als Out-Parameter übergeben werden, müssen nicht initialisiert werden. Allerdings muss dem Out-Parameter ein Wert zugewiesen werden, bevor die Methode zurückkehrt.

Eigenschaften sind keine Variablen und können nicht als Out-Parameter übergeben werden.

Kurz gesagt, es lässt sich in einem Satz zusammenfassen: ref bedeutet sowohl rein als auch raus, während out nur rausgehen, aber nicht rein bedeutet.

Verwandte Artikel:

[c#-Tutorial] C#-Datentypen

Betrachten Sie C, C++, C# durch statisches Lokal Variablen, Java, PHP-Funktionen

Das obige ist der detaillierte Inhalt vonWas halten Sie von out und ref in C#? Entdecken Sie die Unterschiede zwischen ihnen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
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