백엔드 개발 C#.Net 튜토리얼 C# 배열을 매개변수로 전달하는 문제 해결

C# 배열을 매개변수로 전달하는 문제 해결

Sep 19, 2017 am 11:28 AM
.net 나타나다

원칙: 데이터 수정을 최대한 제어하세요. 특정 데이터가 변경되지 않거나 변경되지 않아야 한다고 예측할 수 있는 경우 이 데이터를 사용하는 호출자가 해당 값을 변경하지 않을 것이라고 기대하지 마세요.

사용 중에 매개변수가 실수로 수정되면 예측할 수 없는 결과가 발생하며 이 오류를 감지하기 어렵습니다. 따라서 메소드 매개변수를 설계할 때 참조 유형 매개변수 또는 참조 전달로 인해 발생할 수 있는 결과를 충분히 고려해야 합니다. 이런 식으로.

전송 프로세스 중에 데이터 조각을 변경할 수 없는 경우 개체를 생성할 때 값(필드 또는 속성)을 변경하면 안 됩니다.

1. 단순 매개변수 제어

1. 값형 매개변수 전달

이 경우 매개변수의 복사본이 전달되기 때문에 원래 값에 영향을 미치지 않으며 제어가 필요하지 않습니다.

2. 참조 유형 매개변수 전달

a. 값 유형으로 구성된 데이터 구조

는 필드를 읽기 전용으로 설정하고 속성만 가져옵니다. 할당은 생성자를 통해서만 수행할 수 있습니다.

b. 참조 유형 필드를 포함하는 데이터 구조

이 상황은 필드가 읽기 전용이고 동시에 참조 유형 필드에서 사용되는 유형도 충족하는지 확인해야 합니다. 이 요구 사항.


public class SuperClass
{    private readonly int  _no;    private readonly SubClass _tag; 
    public int NO
   {         get{ return _no;}
   }    
    public SubClass Tag
    {         get{ retirn _tag;}
     }      
      public SuperClass(int no,SubClass tag)
      {
            _no=no;
            _tag=tag;   
       }
} 
 
public class SubClass
{     private readonly int _field;     
     public int Field
     {          get{ return _field;}
     } 
     public SubClass(int field)
    {
          _field=field;
     }
}
로그인 후 복사

2. 복잡한 참조 유형 매개변수 전달 제어

소위 복잡성이란 매개변수가 배열 또는 컬렉션 유형이거나 매개변수에 이러한 유형의 데이터가 포함되어 있음을 의미합니다. 메소드는 매개변수 데이터가 수정되지 않는다고 보장할 수 없습니다. 왜냐하면 객체가 읽기 전용이더라도 객체의 배열 또는 컬렉션 필드(속성)는 여전히 수정될 수 있기 때문입니다.

1. 컬렉션 매개변수(컬렉션 필드가 포함된 참조 매개변수에도 동일하게 적용됨)

.net 4.5 이전 버전에서는 특정 컬렉션 유형 대신 컬렉션 요소를 수정하는 메서드가 포함되지 않은 인터페이스를 사용할 수 있습니다. 예를 들어 List 대신 IEnumerable 인터페이스를 사용하세요. 버전 4.5에서는 IReadOnlyCollection 인터페이스 또는 이 인터페이스를 구현하는 컬렉션 유형을 직접 사용할 수 있습니다.

2. 배열 매개변수

배열 유형 매개변수가 수정되는 것을 방지할 수 있는 좋은 방법은 없으므로 선택적 매개변수를 사용하지 않는 한 배열 유형을 메소드 매개변수로 사용하지 마십시오.

3. 위 내용을 이해하려면 개념의 차이를 구분해야 합니다.

1. 값 전송과 참조 전송의 차이점

2. )

3. 참조 유형 매개변수 전달과 참조(ref 및 out) 참조 유형 매개변수 전달의 차이점 [이것이 가장 혼란스럽습니다.]

차이점은 사용 중에 참조를 위해 새 객체가 생성될 때입니다. 이 매개변수에서 전자는 원래 값에 영향을 주지 않으며 후자는 원래 값에 영향을 미칩니다. 예:


void FunA(MyClass a)

{

     a=new MyClass("A");

} 

void FunB(ref MyClass a)

{

     a=new MyClass("B");

} 

void Test()

{

  MyClass a=new MyClass("A");   

      FunA(a);                

      Print(a);              //a还是原始的对象 TEST
 

      FunB(ref a);

       Print(a);               //a变为新对象   B}
로그인 후 복사

원칙 기억하기:

값 유형은 값의 복사본을 전송하고 참조는 유형은 객체 참조를 전송하므로 값 매개변수의 수정은 원래 값에 영향을 주지 않으며 참조 유형의 수정은 원래 값에 영향을 미칩니다. 값으로 전달된 매개변수 구성은 원래 값에 영향을 주지 않으며 참조 전달(ref 및 out) 원래 값에 영향을 미칩니다.

위 내용은 C# 배열을 매개변수로 전달하는 문제 해결의 상세 내용입니다. 자세한 내용은 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를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

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

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

차세대 C 컴파일러를 추가하는 방법 차세대 C 컴파일러를 추가하는 방법 Mar 03, 2025 pm 05:44 PM

이 기사에서는 printf 내에서 \ n 탈출 시퀀스를 사용하여 C에서 Newline 문자를 만드는 방법을 설명하고 함수를 넣습니다. 기능을 자세히 설명하고 출력에서 ​​라인 브레이크 사용을 보여주는 코드 예제를 제공합니다.

C 언어로 Null의 대안은 무엇입니까? C 언어로 Null의 대안은 무엇입니까? Mar 03, 2025 pm 05:37 PM

이 기사는 C의 Null 포인터 단축의 도전에 대해 탐구합니다. 그것은 문제가 그 자체가 아니라 오용한다고 주장합니다. 이 기사는 사전 수준 점검, 포인터 이니셜을 포함한 수반을 방지하기위한 모범 사례에 대해 자세히 설명합니다.

어떤 C 언어 컴파일러가 더 낫습니까? 어떤 C 언어 컴파일러가 더 낫습니까? Mar 03, 2025 pm 05:39 PM

이 기사는 초보자가 C 컴파일러를 선택하도록 안내합니다. GCC는 사용 편의성, 광범위한 가용성 및 광범위한 리소스로 인해 초보자에게 가장 적합하다고 주장합니다. 그러나 GCC, Clang, MSVC 및 TCC도 비교하여 차이를 강조합니다.

Null은 C 언어로 된 현대 프로그래밍에서 여전히 중요합니까? Null은 C 언어로 된 현대 프로그래밍에서 여전히 중요합니까? Mar 03, 2025 pm 05:35 PM

이 기사는 현대 C 프로그래밍에서 NULL의 지속적인 중요성을 강조합니다. 발전에도 불구하고 NULL은 명시적인 포인터 관리에 중요하며, 유효한 메모리 주소가 없음을 표시하여 세분화 결함을 방지합니다. 최고의 PRAC

C 언어 컴파일러의 웹 버전은 무엇입니까? C 언어 컴파일러의 웹 버전은 무엇입니까? Mar 03, 2025 pm 05:42 PM

이 기사에서는 초보자를위한 온라인 C 컴파일러를 검토하여 사용 편의성 및 디버깅 기능에 중점을 둡니다. OnlineGDB 및 Repl.it는 사용자 친화적 인 인터페이스 및 유용한 디버깅 도구를 위해 강조 표시됩니다. 프로그램 및 컴파일과 같은 다른 옵션

C 언어 컴파일러에 의해 코드를 복사하는 방법 C 언어 컴파일러에 의해 코드를 복사하는 방법 Mar 03, 2025 pm 05:43 PM

이 기사에서는 C IDE의 효율적인 코드 복사에 대해 설명합니다. 복사는 컴파일러 기능이 아닌 IDE 기능이며 IDE 선택 도구 사용, 코드 폴딩, 검색/교체, Templa를 포함하여 효율성 향상을위한 세부 사항 전략을 강조합니다.

C 언어 온라인 프로그래밍 웹 사이트 C 언어 컴파일러 공식 웹 사이트 요약 C 언어 온라인 프로그래밍 웹 사이트 C 언어 컴파일러 공식 웹 사이트 요약 Mar 03, 2025 pm 05:41 PM

이 기사는 온라인 C 프로그래밍 플랫폼을 비교하여 디버깅 도구, IDE 기능, 표준 컴플라이언스 및 메모리/실행 제한과 같은 기능의 차이점을 강조합니다. "최고의"플랫폼은 사용자의 요구에 달려 있다고 주장합니다.

C 언어 컴파일러 설치 자습서 (컴퓨터 버전) C 언어 컴파일러 설치 자습서 (컴퓨터 버전) Mar 03, 2025 pm 05:41 PM

이 자습서는 Windows, MacOS 및 Linux에 C 컴파일을 설치하여 사용자를 안내합니다. 인기있는 컴파일러 (Mingw, Visual Studio, Xcode, GCC)에 대한 설치에 대해 자세히 설명하고 환경 변수 구성을 설명하며 문제 해결 단계를 제공합니다.

See all articles