2012-02-09 2 views
28

방금 ​​Visual Studio 2010 서비스 팩 (Windows Update에서 제안 됨)을 설치했으며 "intellisense"라는 새로운 기능을 볼 수 있습니다. 즉, Function 또는 Sub을 VB.NET에 쓸 때 매개 변수를 자동 완성하지 않습니다. ByRef 또는 ByVal ...ByVal/ByRef를 더 이상 표시하지 않아도되는 이유는 무엇입니까?

1) 이전에이 옵션을 다시 구성 할 수 있습니까?

2) ByX을 지정하지 않으면 어떤 것이 기본값으로 사용됩니까? 그것은이 게시물 질문을 커버 것으로 보인다

+2

기본값은 ByVal이지만, [값 및 참조로 전달] (http://msdn.microsoft.com/en-us/library/ddck1z30.aspx)의 의미를 이해해야합니다. –

+9

거의 항상 ByVal을 전달하기를 원합니다. 사실 이것은 기본값입니다. 코드가 "ByVal"로 뒤죽박죽이 될 이유는 없습니다. 그것은 단지 "소음"입니다. 절대적으로 Pass-by-Reference 의미론을 가져야 할 때 명시 적으로 'ByRef' 만 명시 적으로 지정하십시오. –

답변

17

팀은 직접 물었지만, 명심해야 할 다른 일이 무엇인지 포함하는 사용자 정의 클래스와 같은 모든 참조 형 변수도 값을 전달하면 해당 인스턴스에 변경 사항을 적용 할 수 있습니다. 그러나 전체 개체를 변경할 수는 없습니다. 어느 그것이 당신에게 보였다 이유가 될 수 MSDN에서 참조

Public Sub (Something As WhateverClass) 
    Something = New WhateverClass 'will result in no changes when outside this method 

    Something.Property1 = "Test" 'will result in an updated property when outside this method 
End Sub 

에 의해 디폴트 수 :

참조 형식의 값은 다른 메모리에있는 데이터에 대한 포인터입니다. 즉, 참조 형식을 값으로 전달하면 프로 시저 코드는 기본 요소 자체에 액세스 할 수 없더라도 기본 요소의 데이터 인 에 대한 포인터를 갖습니다. 의 경우 요소가 배열 변수 인 경우 프로 시저 코드는 에 변수 자체에 대한 액세스 권한이 없지만 배열 멤버에 액세스 할 수 있습니다. 기본값은 ByRef이다 VBA에 루틴을 전송할 때

+0

이 답변은 "참조 유형의 가치가 어떻게 작동하는지"설명하기 때문에 오해의 소지가 있습니다. 반면에 "왜 ByVal/ByRef를 더 이상 표시 할 필요가 없습니까?"라는 질문이 있습니다. – mchar

31

(항상 ByRef처럼 보인다) :

http://msmvps.com/blogs/carlosq/archive/2011/03/15/vs-2010-sp1-changing-quot-byval-quot-vb-net-code-editor-experience.aspx

그래서 아니, 이전의 행동을 볼 수있는 방법이 없습니다. 지금부터 ByVal이 기본값 (이전의 내용)이며 메서드 매개 변수에 자동으로 추가되지 않습니다.

내 생각에 VB.NET이 C#과 일관성이 있고 불필요한 "노이즈"(이미 충분히 장황하다)는 피할 수 있으므로 좋은 결정입니다.

이전 동작 :

Private Sub test(ByVal test As String) 
End Sub 

새로운 행동

Private Sub test(test As String) 
End Sub 
+0

간단하고 간결한 답을 얻을 수 있습니다. – mchar

8

는주의 (예를 들어, 참조, 위대한 칩 피어슨, the bottom of this page에서 "매개 변수를 전달하는 기본 방법"참조). 지저분 할 수 있습니다.

관련 문제