2010-12-05 81 views

回答

74

否,不存在在VB中out關鍵字等效。

然而,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互操作或平臺調用。)

+0

有沒有辦法避免編譯警告,而不禁用警告。 – cspolton 2010-12-05 12:34:36

-4

使用關鍵字ByRef變量之前。

+4

`ByRef`等效於C#`ref`參數,這需要被傳遞到一個函數之前被初始化。 – cspolton 2010-12-05 12:31:04

6

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 

Found the answer here

更新

正如評論指出不要忘了你的initialze參數會成爲我們編在出時隙

+0

一般來說,我同意* ByRef *是最接近* out *的東西。但是,如果您傳遞一個未初始化的變量,* ByRef *仍然會引發警告,如問題所述。 – Richard 2012-06-12 21:00:00

+0

感謝您的更新奇怪的downvote 1歲的答案? – David 2012-06-13 11:46:21

+0

感謝您的更新。 – Richard 2012-06-13 16:02:40

27

否,不存在等效構建體,其允許非初始化變量被傳遞給方法而不發出警告,但是,如在我的question and answer指定上的ByRef參數定義一個<Out()> attribute,雖然提到VB ig對它的處理,被C#視爲out參數。

所以,我會預先初始化參考變量Nothing指定<Out()> ByRef來表示的意向(如C#用戶訪問過你的方法,將工作)。

如果你覺得你知道,當你打算訪問默認Nothing另有未分配的參考變量,你可以在項目級別上設置了「警告配置」 「無」「的變量之前分配使用」 (項目屬性>編譯,並且您可能希望在更改此設置之前將配置設置爲「所有配置」),或者在VS2015(VB.NET 14)中,可以使用#Disable Warning BC42030

0

您可以在VB.NET中使用傳遞引用方法。

你需要在C#Out參數的機制,因爲它不會讓你使用任何變量沒有初始化它。

VB.NET並不需要一個特殊的關鍵字,因爲它本身可以自動進行。

只要使用ByRef。

0

我在VB.NET這個問題,我稱那傳遞的數組回功能「由參」。

即使編譯器標記它作爲一個警告,感覺不錯。修復是非常簡單的,可能是很好的編程習慣。

我改變

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 
相關問題