매개 변수로 참조되는 객체가 함수에서 수정되는 경우 ref를 사용하는지 여부가 중요합니까? 다음 두 가지 기능간에 차이가 있습니까?Ref와 자체 수정 객체에 대한 No Ref
void DisposeObject(ClassThing c)
{
c.Dispose();
}
void DisposeObject(ref ClassThing c)
{
c.Dispose();
}
매개 변수로 참조되는 객체가 함수에서 수정되는 경우 ref를 사용하는지 여부가 중요합니까? 다음 두 가지 기능간에 차이가 있습니까?Ref와 자체 수정 객체에 대한 No Ref
void DisposeObject(ClassThing c)
{
c.Dispose();
}
void DisposeObject(ref ClassThing c)
{
c.Dispose();
}
귀하의 경우에 따라 다릅니다.
하지만 : 당신이 방법의 내부가 심판 키워드로 참조 객체를 전달하면
은 가능성이 유형의 다른 객체를 가리 키도록 참조를 변경할 수 있습니다 (그래서 외부에서 볼 수있을 것입니다
중요하지 않습니다. 당신이 c
뭔가를 할당하는 (그리고이 방법 밖에 반영하고자)하는 경우 중요한 것은입니다 : 당신이 ref
를 사용하는 것이 경우
c = new ClassThing();
.
the MSDN guide to passing reference-type parameters에 따른 방법)
값별로 기준 형 파라미터를 전달, 이러한 클래스의 값으로 데이터를 기준 가리키는 변화시킬 수있다 회원. 그러나 참조 자체의 값은 변경할 수 없습니다. 즉, 동일한 참조를 사용하여 새 클래스에 대한 메모리를 할당하고 블록 외부에서 계속 유지할 수는 없습니다. 이를 수행하려면 ref 또는 out 키워드를 사용하여 매개 변수를 전달하십시오.
원래 개체를 변경할 수는 있지만 원본 개체를 변경하여 메모리의 다른 위치를 참조 할 수는 없습니다. 예 : 나는 Dispose()
의 행동에 대해 구체적으로 모르겠지만
static void Main()
{
int[] integerArray = new int[8];
foo(integerArray);
}
private void foo(int[] myArray)
{
myArray[0] = 5; //this changes integerArray
myArray = new int[4]; //this does not change integerArray,
// ... but it would if you used ref or out
}
그래서 그 차이는 중요합니까.
반환 값이없는 c에서만 함수를 호출 할 때 ref가 아무런 변화가 없지만 c 자체에 영향을 주는지 묻는 질문을 다시 쓸 수 있다고 생각합니다. – carlbenson
아무 것도 바뀌지 않습니다. (미안, 그게 내가 '중요하지 않다'고 말했던 때였 다.) –