C#에는 구조체라고 하는 복잡한 값 타입이 있다. 구조체는 클래스의 정의와 매우 유사하지만 클래스와 달리 항상 값으로 전달된다. 즉, 구조체를 함수에 전달하면 구조체의 복사본이 생성되고 함수에서 이것을 다른 함수로 전달하면 또 다른 복사본이 생성된다. 구조체는 항상 복사된다. 다음 예제를 생각해 보자.
코드 2-4 불변성 예제
struct Point
{
public int X;
public int Y;
public override string ToString() => $"X:{X},Y:{Y}";
}
static void Main(string[] args) {
var a = new Point() {
X = 5,
Y = 5,
};
var b = a;
b.X = 100;
b.Y = 200;
Console.WriteLine(b);
Console.WriteLine(a);
}