ref
객체가 무엇인지 변경하려면 a를 전달 하십시오.
TestRef t = new TestRef();
t.Something = "Foo";
DoSomething(ref t);
void DoSomething(ref TestRef t)
{
t = new TestRef();
t.Something = "Not just a changed t, but a completely different TestRef object";
}
DoSomething을 호출 한 후 t
original를 참조하는 것이 new TestRef
아니라 완전히 다른 객체를 나타냅니다.
변경할 수없는 객체의 값을 변경하려는 경우에도 유용합니다 (예 : a) string
. string
일단 작성된 값은 변경할 수 없습니다 . 그러나를 사용하면 ref
값이 다른 다른 문자열을 변경하는 함수를 만들 수 있습니다.
편집 : 다른 사람들이 언급했듯이. ref
필요한 경우가 아니면 사용 하지 않는 것이 좋습니다 . 를 사용 ref
하면 메소드가 다른 것에 대한 인수를 자유롭게 변경할 수 있으므로 메소드 호출자는 이러한 가능성을 처리하도록 코딩해야합니다.
또한 매개 변수 유형이 객체 인 경우 객체 변수는 항상 객체에 대한 참조로 작동합니다. 이는 ref
키워드가 사용될 때 참조에 대한 참조를 얻었음을 의미합니다 . 이를 통해 위에 제공된 예에 설명 된대로 작업을 수행 할 수 있습니다. 그러나 매개 변수 유형이 기본 값 (예 :) 인 int
경우이 매개 변수가 메소드 내에 지정되면 전달 된 인수의 값은 메소드가 리턴 한 후에 변경됩니다.
int x = 1;
Change(ref x);
Debug.Assert(x == 5);
WillNotChange(x);
Debug.Assert(x == 5); // Note: x doesn't become 10
void Change(ref int x)
{
x = 5;
}
void WillNotChange(int x)
{
x = 10;
}