VB.NETには、関数に渡される変数を初期化する必要のないC#out
関数パラメーターに直接相当するものがありますか?
いいえ、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相互運用またはプラットフォーム呼び出しのために呼び出しがマーシャリングされる場合にのみ違いが生じます。
いいえ、警告なしで初期化されていない変数をメソッドに渡すことを許可する同等の構造はありませんが、私の question and answer で指定されているように <Out()>
属性ByRef
パラメーター定義では、VBは無視しますが、isはC#として扱われますout
パラメーター。
したがって、参照変数を事前に初期化してNothing
andを指定して<Out()> ByRef
を指定し、意図を示します(C#ユーザーがアクセスした場合に機能します)あなたの方法)。
割り当てられていない参照変数のデフォルトNothing
にアクセスするタイミングがわかっている場合は、「警告構成」「割り当て前の変数の使用」to "None"プロジェクトレベル(Project Properties> Compileで、Configurationを "All Configurations"に設定します。 「この設定を変更する前に)、または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には、配列を返す「参照渡し」の関数を呼び出すという問題がありました。
コンパイラーは警告としてフラグを立てましたが、問題ありませんでした。修正は非常に簡単で、おそらく良いプログラミング手法です。
私が変更され
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にはC#outと同じ属性がありますが、今日使用しても警告が表示されます。 githubのvblangエリアに修正方法の詳細があります。 https://github.com/dotnet/vblang/issues/67 。
VB.NETの参照渡し方法を使用できます。
C#では、初期化せずに変数を使用できないため、Outパラメーターメカニズムが必要です。
VB.NETは、自動的にそれを自動的に行うため、特別なキーワードは必要ありません。
ByRefを使用するだけです。