나는 ref 매개 변수를 사용하는 메서드가 있습니다. 동일한 메서드 (과부하없이)를 ref로 매개 변수를 전달하지 않고 사용하는 방법이 있습니까?동일한 방법을 사용하거나 사용하지 않을 수 있습니까?
3
A
답변
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"로 전달해야합니다.
3
내가 아는 한, 메서드 서명이 ref를 지정하면 매개 변수를 ref로 전달해야합니다. 그런 식으로 컴파일러는 초기화하기 전에 값을 초기화해야한다는 것을 알고 있습니다.
1
아니요 ... 아마도 ref로 원래 값을 수정하지 못하도록 매개 변수로 전달하려는 값의 복사본을 만들 수 있습니까?
10
아니요. ref 키워드는 메소드가 전달 된 값 (값이 아닌 유형 인 경우 참조)을 수정할 수 있도록 지정합니다.
컴파일러는 소비자가 통화 후 값이 다를 수 있다는 것을 알고 있도록 매개 변수의 'ref-ness'를 시행합니다.
변수를 변경하지 않으려면 사본을 만들어 사본으로 호출하십시오.
관련 문제
- 1. PHP에서 심볼을 사용하거나 사용하지 않을 때
- 2. C#에서 var를 사용하거나 사용하지 않을 기술적 인 이유가 있습니까?
- 3. session_set_save_handler를 사용하거나 사용하지 않으려면?
- 4. jsTree - DB에서 nestedSet을 사용하지 않을 수 있습니까?
- 5. 면제에서 DisplayTemplate을 사용하지 않을 수 있습니까?
- 6. 상태 패턴을 사용하거나 사용하지 않으려면?
- 7. gridview를 사용하지 않을 때
- 8. 오류 코드를 사용하거나 사용하지 않으려면
- 9. MPI를 사용하지 않을 때
- 10. 콜론을 사용하거나 선택자를 사용하지 않음
- 11. MVVM을 사용하지 않을 때?
- 12. CoreAnimation을 사용하지 않는 경우와 사용하지 않을 경우
- 13. iPhone 가속도계를 사용하지 않을 때
- 14. 어떻게 NSMutableArray에서 무작위로 그려도 동일한 번호를 두 번 사용하지 않을 수 있습니까?
- 15. SynchronizationContext를 WinForms/WPF 응용 프로그램에서 사용하지 않을 수 있습니까?
- 16. Drupal 노드를 사용하지 않을 때?
- 17. SwingWorker를 일반 스레드와 비교하여 사용하거나 사용하지 않으려면
- 18. 디버그 정보를 사용하거나 사용하지 않고 최적화하여 구축했습니다.
- 19. 통합 테스트를 사용하지 않을 경우
- 20. ENUM/SET 유형을 사용하거나 사용하지 않으려면 어떻게해야합니까?
- 21. 사용하지 않을 때 UIViewController 해제
- 22. .aspx 확장명을 사용하거나 사용하지 않는 링크
- 23. NSTimer를 사용하지 않고 10 초마다 방법을 트리거 할 수 있습니까?
- 24. 스프링을 사용하지 않을 때의 문제점
- 25. 스프링 통합을 사용하거나 사용하지 않습니까? JMS (ActiveMq)
- 26. 도구 모음을 사용하지 않을 때 자동으로 숨기기
- 27. 동일한 데이터베이스를 사용하거나 보고서 및 웹용으로 복제하십시오.
- 28. execWB 방법을 사용하지 못하는 경우
- 29. 메모리 호그가 변경되지 않을 수 있습니까?
- 30. 나는 SHDocVw.ShellWindows와 함께 Thread.Sleep을 사용하지 않을 것입니다.
친애하는 에릭 님, 더 많은 정보가있는 링크를 공유하십니까? 그리고 여기 foo.Blah (뭐든간에 : 10); 뭐가 뭐야? 그것은 유형 또는 pls 설명하는 핵심 단어를 지정해야합니까? – Ravisha
@Ravisha : C# 4에서는 이름으로 전달할 매개 변수 만 지정하여 선택적 매개 변수를 사용하는 메서드를 호출 할 수 있습니다. 그래서 M (int x = 1, int y = 2, int z = 0)을 가지고 있다면 M (y : 123)이라고 말할 수 있고 M (1, 123, 0)을 호출 할 것입니다. –