2009-04-08 3 views
3

심판에 의해 물건을 건네주고있다.

public function Foo(ref Bar bar) 
{ 
    bar.Prop = 1; 
} 

public function Foo(Bar bar) 
{ 
    bar.Prop = 1; 
} 

의 차이점은 무엇입니까? 기본적으로 "ref"의 요점은 무엇입니까? 항상 참조에 의한 객체가 아닌가?

답변

10

요점은 실제로 객체을 전달하지 않는다는 것입니다. 참조을 전달하고 인수 자체를 참조 또는 값으로 전달할 수 있습니다. 매개 변수 값 자체를 변경하면 다른 방식으로 작동합니다. null 또는 다른 참조로 설정하십시오. ref이 변경되면 호출자의 변수에 영향을줍니다. ref없이 의 값만 전달되었으므로 호출자는 변수에 대한 변경 사항을 볼 수 없습니다.

자세한 내용은 my article on argument passing을 참조하십시오.

+0

"argumetn 자체는 참조 또는 값으로 전달 될 수 있으며"매개 변수 또는 값으로 전달 될 수 없다 "는 의미입니다. 아니면 내 어휘가 잘못 되었나요? – erikkallen

+0

@erikkallen : 오타 - 수정 됨, 감사합니다. –

9

예. 그러나 당신이 이것을해야한다면 :

public function Foo(ref Bar bar) 
{ 
    bar = new Bar(); 
} 

public function Foo(Bar bar) 
{ 
    bar = new Bar(); 
} 

당신은 그 차이를 알 것입니다. 첫 번째는 참조에 대한 참조를 전달하므로이 경우 막대가 새 객체로 변경됩니다. 두 번째에서는 그렇지 않습니다.

관련 문제