백엔드 개발 C#.Net 튜토리얼 C#의 out과 ref의 차이점에 대한 자세한 소개(그림 및 텍스트)

C#의 out과 ref의 차이점에 대한 자세한 소개(그림 및 텍스트)

Mar 29, 2017 am 11:53 AM

이 글은 주로 out과 ref에 대한 관련 지식을 소개합니다. 특정 참조 값이 있으므로 아래 편집기로 살펴보겠습니다

C# out 및 ref를 완전히 이해하려면 먼저 다음 두 가지 개념을 명확히 해야 합니다(값 유형과 참조 유형을 잘 이해하셨다면 "1. 두 가지 기본 개념을 명확히 하세요")

1. 두 가지 기본 개념을 명확하게 하세요

값 유형:

정의: 값으로 전달됨, 즉 실제 매개변수가 형식 매개변수에 전달됩니다(형식 매개변수 및 실제 매개변수에 관한 용어는 여기서 정의되지 않음). ) .

보관방법 : 주로 스택에 보관.

본질: 값 전송, 복사 복사 양식, 호출 스택의 Pop() 및 Push() 메서드를 통해 구현됩니다.

일반적인 유형: int, float, bool, enum, struct, Array 등

값 유형 예:

//主函数
 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;
 }
로그인 후 복사

분석: 위 코드는 두 변수를 교환한 후 n1과 n2의 값이 변경되지 않는다는 것입니다. 값은 원래 값을 변경하지 않고 복사 복사 양식을 통해 전달됩니다. 그림은 다음과 같습니다.

1) 변수 n1과 n2를 정의하고, 변수를 초기화합니다. 메모리에서의 표현은 대략 다음과 같습니다(int n1 = 10, n2 = 20;).

코드디버그

는 메모리에 나타남

2) 언제 교환변수 메소드 실행

코드 디버깅

은 메모리에 나타남

교환 세부 단계 다이어그램

참조 유형:

정의: 포인터와 같은 주소로 전달 씨++. 일반인의 관점에서 보면 주소를 문 열쇠라고 생각하면 됩니다.

저장 방법: 주로 힙에 저장됩니다.

본질: 주소, 공유 변수, 한 번의 변경, 모든 변경으로 전달됩니다.

일반적인 유형: 문자열, 객체

코드: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;
}
로그인 후 복사

결과:

디버그

개략도

2. 변수 값을 변경할 수 없는 이유는 무엇입니까? C++와 같은 변수의 값을 변경하려면 어떻게 해야 합니까? c#

이 문제를 해결하기 위해 out과 ref를 소개했습니다. 따라서 out과 ref는 모두 참조 유형입니다.

2. out에 대한 자세한 설명

한 문장으로 말하면 out은 들어갈 수만 있고 나갈 수는 없습니다.

//主函数
 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;
 }
로그인 후 복사

결과:

아웃 기능:

1. 메소드 정의와 메소드 호출 모두에 out 키워드를 사용해야 합니다. (위 코드는 확실히 보기 쉽습니다)

2. out은 out만 나가고 in은 안 됩니다. 즉, 메소드의 외부 매개변수를 삭제하는 기능이 있습니다. (위 코드에서 n1과 n2의 값은 독자가 임의로 변경할 수 있습니다. GetSum() 메서드 본문이 변경되지 않는 한 출력 값은 13입니다.)

3 참고 사항입니다. 유형. (n1과 n2를 미리 정의하지 않고 직접 호출하면 컴파일이 실패합니다)

4. 동일한 이름을 가진 함수의 경우 out은 ref와 동시에 존재하지 않으며

오버로드<🎜될 수 있습니다. >.

//如下两个方法可以重载
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;}
로그인 후 복사

3. ref에 대한 자세한 설명

한 문장으로: 입구가 있고 출구가 있습니다.

//主函数
 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;
 }
로그인 후 복사

ref特点: 

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

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

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

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

四、out与ref异同

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

위 내용은 C#의 out과 ref의 차이점에 대한 자세한 소개(그림 및 텍스트)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

C#을 사용한 Active Directory C#을 사용한 Active Directory Sep 03, 2024 pm 03:33 PM

C#을 사용한 Active Directory 가이드. 여기에서는 소개와 구문 및 예제와 함께 C#에서 Active Directory가 작동하는 방식에 대해 설명합니다.

C# 직렬화 C# 직렬화 Sep 03, 2024 pm 03:30 PM

C# 직렬화 가이드. 여기에서는 C# 직렬화 개체의 소개, 단계, 작업 및 예제를 각각 논의합니다.

C#의 난수 생성기 C#의 난수 생성기 Sep 03, 2024 pm 03:34 PM

C#의 난수 생성기 가이드입니다. 여기서는 난수 생성기의 작동 방식, 의사 난수 및 보안 숫자의 개념에 대해 설명합니다.

C# 데이터 그리드 보기 C# 데이터 그리드 보기 Sep 03, 2024 pm 03:32 PM

C# 데이터 그리드 뷰 가이드. 여기서는 SQL 데이터베이스 또는 Excel 파일에서 데이터 그리드 보기를 로드하고 내보내는 방법에 대한 예를 설명합니다.

C#의 패턴 C#의 패턴 Sep 03, 2024 pm 03:33 PM

C#의 패턴 가이드. 여기에서는 예제 및 코드 구현과 함께 C#의 패턴 소개 및 상위 3가지 유형에 대해 설명합니다.

C#의 소수 C#의 소수 Sep 03, 2024 pm 03:35 PM

C#의 소수 가이드. 여기서는 코드 구현과 함께 C#의 소수에 대한 소개와 예를 논의합니다.

C#의 팩토리얼 C#의 팩토리얼 Sep 03, 2024 pm 03:34 PM

C#의 팩토리얼 가이드입니다. 여기서는 다양한 예제 및 코드 구현과 함께 C#의 계승에 대한 소개를 논의합니다.

멀티 스레딩과 비동기 C#의 차이 멀티 스레딩과 비동기 C#의 차이 Apr 03, 2025 pm 02:57 PM

멀티 스레딩과 비동기식의 차이점은 멀티 스레딩이 동시에 여러 스레드를 실행하는 반면, 현재 스레드를 차단하지 않고 비동기식으로 작업을 수행한다는 것입니다. 멀티 스레딩은 컴퓨팅 집약적 인 작업에 사용되며 비동기식은 사용자 상호 작용에 사용됩니다. 멀티 스레딩의 장점은 컴퓨팅 성능을 향상시키는 것이지만 비동기의 장점은 UI 스레드를 차단하지 않는 것입니다. 멀티 스레딩 또는 비동기식을 선택하는 것은 작업의 특성에 따라 다릅니다. 계산 집약적 작업은 멀티 스레딩을 사용하고 외부 리소스와 상호 작용하고 UI 응답 성을 비동기식으로 유지 해야하는 작업을 사용합니다.

See all articles