Heim Backend-Entwicklung C#.Net-Tutorial Detaillierte Einführung in den Unterschied zwischen out und ref in C# (Bild und Text)

Detaillierte Einführung in den Unterschied zwischen out und ref in C# (Bild und Text)

Mar 29, 2017 am 11:53 AM

In diesem Artikel werden hauptsächlich die relevanten Kenntnisse zu Out und Ref vorgestellt. Es hat einen gewissen Referenzwert, schauen wir es uns mit dem Editor unten an

Um C# out und ref vollständig zu verstehen, müssen Sie zunächst die folgenden zwei Konzepte klären (Wenn Sie Werttypen und Referenztypen gut verstehen, können Sie „1. Zwei Grundkonzepte klären“ überspringen)

1. Zwei Grundkonzepte klären

Werttyp:

Definition: Als Wert übergeben, d. h. Aktualparameter werden an Formalparameter übergeben (Begriffe zu Formalparametern und Aktualparametern werden hier nicht definiert ).

Speichermethode: Hauptsächlich im Stapel.

Essenz: Implementiert durch Wertübertragung, Kopieren Kopierformular und die Methoden Pop() und Push() des Aufrufstapels.

Gängige Typen: int, float, bool, enum, struct, Array usw.

Beispiel für einen Werttyp:

//主函数
 static void Main(string[] args)
 {
  //定义两个实参n1和n2,并初始化
  int n1 = 10, n2 = 20;
  Console.WriteLine("交换前n1和n2的值");
  Console.WriteLine("n1={0},n2={1}", n1, n2);//n1=10,n2=20
  Swap(n1,n2);
  Console.WriteLine("交换后n1和n2的值");
  Console.WriteLine("n1={0},n2={1}",n1,n2);//n1=10,n2=20
  Console.Read();
 }
 /// <summary>
 /// 交换两个变量的值
 /// </summary>
 /// <param name="n1">形参n1</param>
 /// <param name="n2">形参n2</param>
 static private void Swap(int t1,int t2)
 {
  int temp;
  temp =t1;
  t1 =t2;
  t2 = temp;
 }
Nach dem Login kopieren

Analyse: Der obige Code ändert die Werte von n1 und n2 nach dem Austausch zweier Variablen nicht Die Wertübertragung erfolgt. Durch das Kopieren des Formulars wird der Originalwert nicht verändert. Das Bild sieht wie folgt aus:

1) Variablen n1 und n2 definieren und die Variablen initialisieren. Die Darstellung im Speicher ist ungefähr wie folgt (int n1 = 10, n2 = 20;)

CodeDebugging

stellt im Speicher dar

2) Wann Ausführen der Austauschvariablenmethode

Code-Debugging

stellt im Speicher dar

Detailliertes Schrittdiagramm austauschen

Referenztyp:

Definition: Übergeben durch Adresse, z. B. einen Zeiger in c++. Laienhaft ausgedrückt: Stellen Sie sich die Adresse einfach als den Schlüssel zur Tür vor.

Speichermethode: Hauptsächlich im Heap gespeichert.

Essenz: Übergeben durch Adresse, gemeinsam genutzte Variablen, eine Änderung, alle Änderungen.

Häufige Typen: String, Objekt usw.

Code:c++

// Cpplus.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
//主函数
int _tmain(int argc, _TCHAR* argv[])
{
 void Swap(int *x, int *y);
 int n1 = 10, n2 = 20;
 printf("交换前n1和n2的值\n");
 printf("%d,%d\n", n1, n2);
 Swap(&n1,&n2);
 printf("交换后n1和n2的值\n");
 printf("%d,%d",n1,n2);
 getchar();
 return 0;
}
//交换函数
void Swap(int *x, int *y)
{
 int temp = *x;
 *x = *y;
 *y = temp;
}
Nach dem Login kopieren

Ergebnis:

Debuggen

Schematische Darstellung

Warum out und ref eingeführt werden

Das kann sein Aus der obigen Analyse geht hervor, dass die Wertübertragung den Wert einer Variablen nicht ändern kann. Was soll ich tun, wenn ich den Wert einer Variablen wie in C++ ändern möchte? c# führte out und ref ein, um dieses Problem zu lösen. Daher sind sowohl out als auch ref Referenztypen.

2. Ausführliche Erklärung von out

In einem Satz: out kann nur eintreten, aber nicht austreten.


//主函数
 static void Main(string[] args)
 {
  int n1, n2;
  Console.WriteLine(GetSum(out n1,out n2));
  Console.Read();
 }
 //out参数
 static public int GetSum(out int numberFirst,out int numberSecond)
 {
  numberFirst = 10;
  numberSecond = 3;
  return numberFirst + numberSecond;
 }
Nach dem Login kopieren

Ergebnis:

out Features:

1. Sowohl die Methodendefinition als auch der Methodenaufruf müssen das Schlüsselwort out verwenden. (Der obige Code ist offensichtlich leicht zu erkennen)

2. Out geht nur raus, aber nicht rein, das heißt, es hat die Funktion, die externen Parameter der Methode zu löschen. (Im obigen Code können Leser die Werte von n1 und n2 beliebig ändern. Solange der Körper der GetSum()-Methode nicht geändert wird, ist der Ausgabewert 13)

3 Es handelt sich um eine Referenz Typ. (Wenn Sie es direkt aufrufen, ohne n1 und n2 im Voraus zu definieren, wird die Kompilierung nicht erfolgreich sein)

4 Bei Funktionen mit demselben Namen existiert out nicht gleichzeitig mit ref und kann < sein 🎜>überlastet.

//如下两个方法可以重载
public void getNumer(int num){}
public void setTime(out int num){num=10;}
//如下两个方法不能重载
public void getNumer(ref int num){num=10;}
public void setTime(out int num){num=10;}
Nach dem Login kopieren

3. Ausführliche Erläuterung von Ref

In einem Satz: Es gibt einen Eingang und es gibt einen Ausgang.

//主函数
 static void Main(string[] args)
 {
  int n1=1, n2=3;
  Console.WriteLine(refGetSum(ref n1,ref n2));
  Console.Read();

 } 
 //ref参数
 static public int refGetSum(ref int numberFirst, ref int numberSecond)
 {
  numberFirst = 10;
  numberSecond = 3;
  return numberFirst + numberSecond;
 }
Nach dem Login kopieren

ref特点: 

   1、方法定义和调用方法都必须显示使用ref关键字。(如上代码显然易见)

   2、ref有进有出,即可以把值传入方法体内。(如上代码,读者可以任意改变n1和n2的值)

   3、为引用类型。(直接调用而不事先定义n1和n2,编译不通过)

   4、同名函数,out不与ref同时存在,可以重载。

四、out与ref异同

主要区别,out只输出yuan'chuang,ref有进有出。

Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in den Unterschied zwischen out und ref in C# (Bild und Text). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Active Directory mit C# Active Directory mit C# Sep 03, 2024 pm 03:33 PM

Leitfaden zu Active Directory mit C#. Hier besprechen wir die Einführung und die Funktionsweise von Active Directory in C# sowie die Syntax und das Beispiel.

C#-Serialisierung C#-Serialisierung Sep 03, 2024 pm 03:30 PM

Leitfaden zur C#-Serialisierung. Hier besprechen wir die Einführung, die Schritte des C#-Serialisierungsobjekts, die Funktionsweise bzw. das Beispiel.

Zufallszahlengenerator in C# Zufallszahlengenerator in C# Sep 03, 2024 pm 03:34 PM

Leitfaden zum Zufallszahlengenerator in C#. Hier besprechen wir die Funktionsweise des Zufallszahlengenerators, das Konzept von Pseudozufallszahlen und sicheren Zahlen.

C#-Datenrasteransicht C#-Datenrasteransicht Sep 03, 2024 pm 03:32 PM

Leitfaden zur C#-Datenrasteransicht. Hier diskutieren wir die Beispiele, wie eine Datenrasteransicht aus der SQL-Datenbank oder einer Excel-Datei geladen und exportiert werden kann.

Muster in C# Muster in C# Sep 03, 2024 pm 03:33 PM

Leitfaden zu Mustern in C#. Hier besprechen wir die Einführung und die drei wichtigsten Arten von Mustern in C# zusammen mit ihren Beispielen und der Code-Implementierung.

Primzahlen in C# Primzahlen in C# Sep 03, 2024 pm 03:35 PM

Leitfaden zu Primzahlen in C#. Hier besprechen wir die Einführung und Beispiele von Primzahlen in C# sowie die Codeimplementierung.

Fakultät in C# Fakultät in C# Sep 03, 2024 pm 03:34 PM

Leitfaden zur Fakultät in C#. Hier diskutieren wir die Einführung in die Fakultät in C# zusammen mit verschiedenen Beispielen und Code-Implementierungen.

Der Unterschied zwischen Multithreading und asynchronem C# Der Unterschied zwischen Multithreading und asynchronem C# Apr 03, 2025 pm 02:57 PM

Der Unterschied zwischen Multithreading und Asynchron besteht darin, dass Multithreading gleichzeitig mehrere Threads ausführt, während asynchron Operationen ausführt, ohne den aktuellen Thread zu blockieren. Multithreading wird für rechenintensive Aufgaben verwendet, während asynchron für die Benutzerinteraktion verwendet wird. Der Vorteil des Multi-Threading besteht darin, die Rechenleistung zu verbessern, während der Vorteil von Asynchron nicht darin besteht, UI-Threads zu blockieren. Die Auswahl von Multithreading oder Asynchron ist von der Art der Aufgabe abhängt: Berechnungsintensive Aufgaben verwenden Multithreading, Aufgaben, die mit externen Ressourcen interagieren und die UI-Reaktionsfähigkeit asynchron verwenden müssen.

See all articles