C# Language값 유형과 참조 유형


통사론

  • 참조로 전달 : public void Double (ref int numberToDouble) {}

비고

소개

값 유형

값 유형은 둘 중 더 간단합니다. 값 유형은 종종 데이터 자체를 나타내는 데 사용됩니다. 3D 공간의 정수, 부울 또는 점은 모두 좋은 값 유형의 예입니다.

값 유형 (구조체)은 struct 키워드를 사용하여 선언됩니다. 새로운 구조체를 선언하는 방법의 예는 구문 섹션을 참조하십시오.

일반적으로 값 유형을 선언하는 데 사용되는 2 개의 키워드가 있습니다.

  • 구조물
  • 열거 형

참조 유형

참조 유형은 약간 더 복잡합니다. 참조 유형은 객체 지향 프로그래밍의 의미에서 전통적인 객체입니다. 그래서, 상속 (및 그 혜택)을 지원하고 finalizers도 지원합니다.

C #에서는 일반적으로 다음과 같은 참조 유형이 있습니다.

  • 수업
  • 대표자들
  • 인터페이스

새 참조 유형 (클래스)은 class 키워드를 사용하여 선언됩니다. 예를 들어, 새 참조 유형을 선언하는 방법에 대한 구문 섹션을 참조하십시오.

주요 차이점

참조 유형과 값 유형 간의 주요 차이점은 아래에서 확인할 수 있습니다.

값 유형은 스택에 있으며, 참조 유형은 힙에 있습니다

이것은 종종 언급되는 두 가지 차이점이지만 실제로 C #에서 int와 같은 값 유형을 사용하면 프로그램은 해당 변수를 사용하여 해당 값을 직접 참조합니다. int mine = 0이라고하면, 변수 mine은 0을 직접 참조하여 효율적입니다. 그러나 참조 유형은 실제로 기본 오브젝트에 대한 참조를 보유합니다 (이름에서 알 수 있듯이). 이는 C ++와 같은 다른 언어의 포인터와 유사합니다.

이 효과는 즉시 느낄 수는 없지만 그 효과는 강력하고 미묘합니다. 예를 들어 다른 곳에서 참조 유형을 변경하는 예를 참조하십시오.

이 차이가 다음과 같은 다른 차이점의 주된 원인이며, 알아 둘 가치가 있습니다.

값 유형은 메소드에서 변경할 때 변경되지 않으며 참조 유형은 변경됩니다.

값 유형이 매개 변수로 메소드에 전달되면 메소드가 값을 변경하는 경우 값은 변경되지 않습니다. 대조적으로 참조 유형을 동일한 메소드에 전달하고이를 변경하면 기본 객체가 변경되므로 그 같은 객체를 사용하는 다른 것들은 원래 값보다는 새로 변경된 객체를 가질 것입니다.

자세한 내용은 값 유형 대 메소드의 참조 유형에 대한 예제를 참조하십시오.

내가 그들을 바꾸고 싶다면?

"ref"키워드를 사용하여 메소드에 전달하기 만하면이 객체를 참조로 전달하게됩니다. 의미, 그것은 메모리에있는 동일한 대상입니다. 당신이하는 수정은 존중받을 것입니다. 예를 들어 참조로 전달하는 예제를 참조하십시오.

값 유형은 null 일 수 없으며 참조 유형은

꽤 많이 말하면, 참조 타입에 null을 할당 할 수 있습니다. 즉, 할당 한 변수에 실제로 할당 된 객체가 없을 수 있습니다. 그러나 값 유형의 경우 이는 불가능합니다. 그러나 Nullable을 사용하면 값 유형을 nullable로 허용 할 수 있습니다 (요구 사항 인 경우). 이것이 고려중인 사항이라면 클래스가 가장 좋은 접근 방식이 아닌지 여부를 강하게 생각하십시오. 유형.

값 유형과 참조 유형 관련 예