Maison développement back-end Tutoriel C#.Net Introduction détaillée à la différence entre out et ref en C# (image et texte)

Introduction détaillée à la différence entre out et ref en C# (image et texte)

Mar 29, 2017 am 11:53 AM

Cet article présente principalement les connaissances pertinentes sur out et ref. Il a une certaine valeur de référence, examinons-le avec l'éditeur ci-dessous

Pour bien comprendre C#out et ref, vous devez d'abord clarifier les deux concepts suivants (Si vous maîtrisez bien les types de valeur et les types de référence, vous pouvez sauter "1. Clarifier deux concepts de base")

1. Clarifier deux concepts de base

Type de valeur :

Définition : Passé par valeur, c'est-à-dire que les paramètres réels sont passés aux paramètres formels (les termes paramètres formels et paramètres réels ne sont pas définis ici ) .

Méthode de stockage : Principalement dans la pile.

Essence : implémenté via le transfert de valeur, le formulaire de copie

copy et les méthodes Pop() et Push() de la pile d'appels.

Types courants : int, float, bool, enum, struct, Array, etc.

Exemple de type de valeur :

//主函数
 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;
 }
Copier après la connexion
Analyse : Le code ci-dessus, par transfert de valeur, ne modifie pas les valeurs de n1 et n2 après l'échange de deux variables. le transfert de valeur est En copiant le formulaire, la valeur originale n'est pas modifiée. L'image est la suivante :

1)

Définissez les variables n1 et n2, et initialisez les variables La représentation en mémoire est à peu près la suivante (int n1 = 10, n2 = 20 ;)

Code

Débogage

représente en mémoire

2) Quand l'exécution de la méthode des variables d'échange

Débogage du code

représente en mémoire

Diagramme détaillé des étapes d'échange

Type de référence :

Définition : transmis par adresse, comme un pointeur dans c++. En termes simples, considérez simplement l’adresse comme la clé de la porte.

Méthode de stockage : principalement stocké dans le tas.

Essence : transmis par adresse, variables partagées, un changement, tous les changements.

Types courants : Chaîne,

Objet, etc.

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;
}
Copier après la connexion
résultat:

Débogage

Diagramme schématique

2 Pourquoi out et ref sont introduits

Cela peut être. Comme le montre l'analyse ci-dessus, le transfert de valeur ne peut pas modifier la valeur d'une variable. Que dois-je faire si je souhaite modifier la valeur d'une variable comme C++ ?

c# introduit et ref pour résoudre ce problème. Par conséquent, out et ref sont des types de référence.

2. Explication détaillée de out

En une phrase : out ne peut qu'entrer mais pas sortir.


//主函数
 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;
 }
Copier après la connexion
résultat :

fonctionnalités :

1. La définition de la méthode et l'appel de la méthode doivent utiliser le mot-clé out. (Le code ci-dessus est évidemment facile à voir)

2. out ne sort que mais pas in, c'est-à-dire qu'il a pour fonction d'effacer les paramètres externes de la méthode. (Dans le code ci-dessus, les lecteurs peuvent modifier arbitrairement les valeurs de n1 et n2. Tant que le corps de la méthode GetSum() n'est pas modifié, la valeur de sortie est 13)

3. taper. (Si vous l'appelez directement sans définir n1 et n2 à l'avance, la compilation ne passera pas)

4 Pour les fonctions du même nom, out n'existe pas avec ref en même temps, et peut être <. 🎜>surchargé

.

//如下两个方法可以重载
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;}
Copier après la connexion
3. Explication détaillée de la réf

En une phrase : il y a une entrée et il y a une sortie.

//主函数
 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;
 }
Copier après la connexion

ref特点: 

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

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

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

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

四、out与ref异同

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

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

Guide d'Active Directory avec C#. Nous discutons ici de l'introduction et du fonctionnement d'Active Directory en C# ainsi que de la syntaxe et de l'exemple.

Sérialisation C# Sérialisation C# Sep 03, 2024 pm 03:30 PM

Guide de sérialisation C#. Nous discutons ici de l'introduction, des étapes de l'objet de sérialisation C#, du fonctionnement et de l'exemple respectivement.

Générateur de nombres aléatoires en C# Générateur de nombres aléatoires en C# Sep 03, 2024 pm 03:34 PM

Guide du générateur de nombres aléatoires en C#. Nous discutons ici du fonctionnement du générateur de nombres aléatoires, du concept de nombres pseudo-aléatoires et sécurisés.

Vue Grille de données C# Vue Grille de données C# Sep 03, 2024 pm 03:32 PM

Guide de la vue Grille de données C#. Nous discutons ici des exemples de la façon dont une vue de grille de données peut être chargée et exportée à partir de la base de données SQL ou d'un fichier Excel.

Modèles en C# Modèles en C# Sep 03, 2024 pm 03:33 PM

Guide des modèles en C#. Nous discutons ici de l'introduction et des 3 principaux types de modèles en C# ainsi que de ses exemples et de l'implémentation du code.

Nombres premiers en C# Nombres premiers en C# Sep 03, 2024 pm 03:35 PM

Guide des nombres premiers en C#. Nous discutons ici de l'introduction et des exemples de nombres premiers en c# ainsi que de l'implémentation du code.

Factorielle en C# Factorielle en C# Sep 03, 2024 pm 03:34 PM

Guide de Factorial en C#. Nous discutons ici de l'introduction de factorial en c# ainsi que de différents exemples et de l'implémentation du code.

La différence entre le multithreading et le C # asynchrone La différence entre le multithreading et le C # asynchrone Apr 03, 2025 pm 02:57 PM

La différence entre le multithreading et l'asynchrone est que le multithreading exécute plusieurs threads en même temps, tandis que les opérations effectuent de manière asynchrone sans bloquer le thread actuel. Le multithreading est utilisé pour les tâches à forte intensité de calcul, tandis que de manière asynchrone est utilisée pour l'interaction utilisateur. L'avantage du multi-threading est d'améliorer les performances informatiques, tandis que l'avantage des asynchrones est de ne pas bloquer les threads d'interface utilisateur. Le choix du multithreading ou asynchrone dépend de la nature de la tâche: les tâches à forte intensité de calcul utilisent le multithreading, les tâches qui interagissent avec les ressources externes et doivent maintenir la réactivité de l'interface utilisateur à utiliser asynchrone.

See all articles