c# 배열은 레퍼런스 타입이다
private void Form1_Load(object sender, EventArgs e)
{
char[] chars = new char[5];
Method1(chars);
Text = chars[0].ToString(); // a
}
void Method1(char[] chars)
{
chars[0] = 'a';
}
배열은 레퍼런스 타입이라서 매개변수로 넘길 때 ref 키워드를 쓰지 않아도 된다. 그러나 이것은 배열을 초기화한 뒤에만 가능하다. 아래의 예제에서는 클래스만 초기화되고 필드인 배열은 초기화되지 않은 상태라서 널로 넘어가며 레퍼런스로서의 기능을 하지 못한다. 즉 주소가 없는 상태이다. 따라서 ref를 붙여 줘야 한다.
class Class1
{
public char[] Chars;
}
private void Form1_Load(object sender, EventArgs e)
{
Class1 class1 = new();
Method1(ref class1.Chars);
Text = class1.Chars[0].ToString(); // a
}
void Method1(ref char[] chars)
{
chars = "abcde".ToCharArray();
}