code

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

codestyles 2020. 9. 22. 08:13
반응형

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"함수를 호출 한 문제가 발생했습니다.

Even though the compiler flagged it as a warning it was fine. The fix is super simple and probably good programming practice.

I changed

Dim m_arr_values() as Integer

fnRetArray(m_arr_values)

to

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

fnRetArray(m_arr_values)

It also helps when coding if variable names are descriptive...

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

You can use the pass by reference method in VB.NET.

You need the Out parameter mechanism in C#, because it doesn't let you use any variable without initializing it.

VB.NET doesn't need a special keyword as it automatically does it by itself.

Just use ByRef.


VB has the attribute which should be the same as C# out but today you still get a warning even if you use it. There are details about fixing it in vblang area of github. https://github.com/dotnet/vblang/issues/67.


Use keyword ByRef before variable.

참고 URL : https://stackoverflow.com/questions/4358742/is-there-a-vb-net-equivalent-of-c-sharp-out-parameters

반응형