VB.NET には、out
関数に渡される変数を初期化する必要がない C# 関数パラメーターと直接同等のものがありますか?
7 に答える
いいえ、out
VB にはキーワードに相当するものはありません。
ただし、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 相互運用またはプラットフォーム呼び出しのために呼び出しがマーシャリングされている場合にのみ違いが生じます。)
いいえ、初期化されていない変数を警告なしでメソッドに渡すことを許可する同等の構造はありませんが、パラメーター定義で属性を指定する私の質問と回答で述べたように、VB はそれを無視しますが、C# によって処理されますパラメータとして。<Out()>
ByRef
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
アップデート
コメントに記載されているように、out スロットで使用されるパラメーターを初期化することを忘れないでください
VB.NET で参照渡しメソッドを使用できます。
初期化せずに変数を使用できないため、C# では Out パラメーター メカニズムが必要です。
VB.NET はそれ自体で自動的に実行されるため、特別なキーワードは必要ありません。
ByRefを使用するだけです。
変数の前にキーワードByRefを使用します。