[vb.net] C # 출력 매개 변수에 해당하는 VB.NET이 있습니까?

VB.NET에는 out함수에 전달 된 변수를 초기화 할 필요가없는 C # 함수 매개 변수 와 직접적으로 동일 합니까?



답변

아니요, outVB 에는 해당 키워드 가 없습니다 .

그러나 VB는 메서드의 모든 지역 변수를 자동으로 초기화하므로 ByRef먼저 변수를 명시 적으로 초기화 할 필요없이 사용할 수 있습니다 .

예:

Sub Main()
  Dim y As Integer
  Test(y)
End Sub

Sub Test(ByRef x As Integer)
  x = 42
End Sub

(프레임 워크의 코드 (예 : Double.TryParse ) 를 검사하는 경우 <OutAttribute>추가 된 매개 변수를 볼 수 있지만 COM interop 또는 플랫폼 호출에 대해 호출이 마샬링 될 때만 차이가 있습니다.)


답변

내에서 언급 한 바와 같이 아니, 거기에 비 초기화 변수가 경고없이 메서드에 전달 될 수 있도록 상응하는 구조 없지만, 질의 응답 지정 <Out()>속성 A의 ByRef매개 변수 정의를 VB가이를 무시하지만, 되는 C 번호로 처리 이 AS out파라미터.

그래서, 난을 참조 변수-초기화를 사전 것입니다 Nothing 지정 <Out()> ByRef의도를 (C #을 사용자가 이제까지 당신의 방법에 액세스하는 경우 문제가 해결됩니다) 의미 할 수 있습니다.

Nothing할당되지 않은 참조 변수 의 기본값 에 액세스하려는시기를 알고 있다고 생각 되면 프로젝트 수준 (프로젝트 속성> 컴파일) 에서 “경고 구성” “할당 전 변수 사용”“없음”으로 설정할 수 있습니다. 이 설정을 변경하기 전에 구성을 “모든 구성”으로 설정하려는 경우) 또는 VS2015 (VB.NET 14)에서 #Disable Warning BC42030.


답변

C # 버전

  void TestFunc(int x, ref int y, out int z) {
  x++;
  y++;
  z = 5;
}

Vb.net 버전

    Sub TestFunc(ByVal x As Integer, ByRef y As Integer, ByRef z As Integer)
  x += 1
  y += 1
  z = 5
End Sub

여기에서 답을 찾았습니다.

최신 정보

주석에서 언급했듯이 아웃 슬롯에서 사용할 매개 변수를 초기화하는 것을 잊지 마십시오


답변

VB.NET에서 배열을 다시 전달하는 “by ref”함수를 호출 한 문제가 발생했습니다.

컴파일러가 경고로 플래그를 지정했지만 괜찮 았습니다. 수정은 매우 간단하며 아마도 좋은 프로그래밍 관행 일 것입니다.

나는 변했다

Dim m_arr_values() as Integer

fnRetArray(m_arr_values)

' Even though 'Nothing' is the default value, setting it
' stops the compiler complaining.
Dim m_arr_values() as Integer = Nothing

fnRetArray(m_arr_values)

변수 이름이 설명적인 경우 코딩 할 때도 도움이됩니다.

Sub fnCreatePalette(ByRef arr_in_pal() As color, ByRef arr_out_pal() as uinteger)
    ...
End Sub


답변

VB.NET에서 참조 방법으로 전달을 사용할 수 있습니다.

초기화 없이는 변수를 사용할 수 없기 때문에 C #에서 Out 매개 변수 메커니즘이 필요합니다.

VB.NET은 자동으로 수행되므로 특수 키워드가 필요하지 않습니다.

ByRef를 사용하십시오.


답변

VB에는 C # 출력과 동일한 속성이 있지만 오늘날에도 사용하더라도 경고가 표시됩니다. github의 vblang 영역에 수정에 대한 자세한 내용이 있습니다. https://github.com/dotnet/vblang/issues/67 .


답변

변수 앞에 키워드 ByRef 를 사용하십시오 .