2010-02-10 5 views

답변

2

매개 변수를 ref로 전달하지 않고 동일한 메소드 (과부하 없음)를 사용할 수 있습니까?

예,하지만이 기능은 도움이되지 않을 수도 있습니다.

C# 4에서는 선택적 ref 매개 변수를 사용하는 COM 개체에 대한 호출에서 "ref"를 사용하는 것은 선택 사항입니다.

이 새로운 기능의 이유는 VB6 용으로 설계된 많은 레거시 COM 개체가 있기 때문입니다. VB6에서는 ref 매개 변수를 생략 할 수 있습니다.

object missing = Type.Missing; 
object abc = 10; 
foo.Blah(ref missing, ref missing, ref missing, ref abc, ref missing); 

왝 : C#을 이전에이 작업을 수행해야 할 것 C#을에서 이러한 메서드를 호출하는 것을 의미하는하지 않았다. C# 4에서는 간단히 말해서

foo.Blah(whatever : 10); 

이라고 말할 수 있으며 컴파일러는 모든 참조 정보와 기타 등을 채 웁니다.

이 기능은 레거시 COM 개체와 C# 4에서만 작동합니다. 다른 시나리오에서는 서명에 필요한 경우 여전히 "ref"로 전달해야합니다.

+0

친애하는 에릭 님, 더 많은 정보가있는 링크를 공유하십니까? 그리고 여기 foo.Blah (뭐든간에 ​​: 10); 뭐가 뭐야? 그것은 유형 또는 pls 설명하는 핵심 단어를 지정해야합니까? – Ravisha

+1

@Ravisha : C# 4에서는 이름으로 전달할 매개 변수 만 지정하여 선택적 매개 변수를 사용하는 메서드를 호출 할 수 있습니다. 그래서 M (int x = 1, int y = 2, int z = 0)을 가지고 있다면 M (y : 123)이라고 말할 수 있고 M (1, 123, 0)을 호출 할 것입니다. –

3

내가 아는 한, 메서드 서명이 ref를 지정하면 매개 변수를 ref로 전달해야합니다. 그런 식으로 컴파일러는 초기화하기 전에 값을 초기화해야한다는 것을 알고 있습니다.

1

아니요 ... 아마도 ref로 원래 값을 수정하지 못하도록 매개 변수로 전달하려는 값의 복사본을 만들 수 있습니까?

10

아니요. ref 키워드는 메소드가 전달 된 값 (값이 아닌 유형 인 경우 참조)을 수정할 수 있도록 지정합니다.

컴파일러는 소비자가 통화 후 값이 다를 수 있다는 것을 알고 있도록 매개 변수의 'ref-ness'를 시행합니다.

변수를 변경하지 않으려면 사본을 만들어 사본으로 호출하십시오.

관련 문제