回答:
いいえ、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相互運用機能またはプラットフォーム呼び出しに対してマーシャリングされている場合にのみ、違いを生じます。)
ByRef
パラメーターとして渡すと、コンパイラの警告も表示されます。(値型パラメーターでは発生しません。)
Nothing
結果を変更しなくても、それらに割り当てても警告は表示されません。
Nothing
これまで彼らに割り当ててきました。大規模なレガシーWebサイトで何百回も実行しなければならないので、時間がかかるだけです。調査ありがとうございます。
Out
属性がC#キーワードと同等ではないことをすでに説明したので、反対票は不当out
です。
いいえ、そこに私の中で述べたように、非初期化変数が警告なしメソッドに渡すことができますが、ない同等の構造ではありません質問と回答の指定<Out()>
属性のByRef
VBはそれを無視するものの、パラメータ定義は、された C#と治療します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で、配列を返す関数を「参照」で呼び出すという問題がありました。
コンパイラは警告としてフラグを立てましたが、問題ありませんでした。修正は非常に簡単で、おそらく良いプログラミング方法です。
私が変更され
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。
Object
、型なしで宣言された変数はになるため、ByRef x As Integer
パラメーターに使用できません)ではなく、問題の原因(たとえば、型なしで宣言された変数)を指摘します。