일반적으로 C#의 모든 유형은 값 유형의 두 가지 주요 범주로 나눌 수 있습니다. 및 참조 유형 . 각 유형에 대해 자세히 살펴보겠습니다.
값 유형
값 유형의 변수에는 해당 데이터가 직접 포함됩니다. 각 변수에는 자체 데이터 복사본이 있습니다. 따라서 값 유형의 변수가 다른 개체를 수정하는 것은 불가능합니다.
값 유형은 다음 유형 중 하나일 수 있습니다. -
- 모든 숫자 유형(예:int, float,) 및 더블
- 문자 및 bool 유형
- 구조체 입력하거나
- 열거 타자.
값 유형 단순에는 값이 포함됩니다. 예를 들어, 정수 유형은 참조 유형과 같이 숫자에 대한 포인터가 아니라 실제 숫자를 포함합니다.
사용자 정의 값 유형을 생성하기 위해 구조체를 사용할 수 있습니다. 예를 들어 -
public struct Point { public int X; public int Y; } var p1 = new Point();
메모리에서 Point의 인스턴스는 다음과 같이 표현됩니다 -
값 유형의 변수를 다른 변수에 할당할 때 할당 작업은 할당되는 값의 복사본을 만듭니다. 예를 들어,
Point p2 = p1;
참조 유형
참조 유형의 변수는 해당 개체에 대한 참조를 저장합니다. 두 개의 다른 변수가 동일한 객체에 대한 참조를 보유하는 것이 가능합니다. 한 변수가 개체에 적용한 모든 변경 사항은 두 번째 변수에 표시됩니다.
참조 유형은 다음 유형으로 구성됩니다. -
- 문자열
- 수업
- 배열
- 대리인
- 인터페이스
예를 들어 다음과 같이 참조 유형인 클래스를 생성할 수 있습니다. -
public class Point{ public int X; public int Y; } var p1 = new Point();
참조 유형의 변수를 다른 변수에 할당할 때 할당 작업은 실제 개체가 아닌 참조만 복사합니다.
Point p2 = p1;
예
using System; class Program{ static void Main(){ var p1 = new Point { X = 10 }; Point p2 = p1; p2.X = 20; Console.WriteLine("Value Type"); Console.WriteLine(p1.X); Console.WriteLine(p2.X); var u1 = new User { Age = 10 }; User u2 = u1; u2.Age = 20; Console.WriteLine("Reference Type"); Console.WriteLine(u1.Age); Console.WriteLine(u2.Age); } } public struct Point{ public int X; public int Y; } public class User{ public int Age { get; set; } }
출력
Value Type 10 20 Reference Type 20 20