Visual Studio 2010 Service Pack(Windows Updateで提案)をインストールしました。VB.NETでFunction
またはSub
を書き込むと、「intellisense」に新機能が表示されますByRef
またはByVal
...でパラメーターを自動補完しません。
1)とにかく、このオプションを以前の状態に戻すことができますか?
2)ByX
を指定しない場合、デフォルトでどちらが使用されますか? (常にByRef
のようです)
ティムはあなたが直接尋ねたものをカバーしましたが、値によって渡されたとしても、ユーザー定義クラスのような参照型変数は、残っているインスタンスプロパティなどに変更を加えることができることを覚えておいてください。ただし、オブジェクト全体を変更することはできません。参照によってデフォルトになっているように思われた理由かもしれません
Public Sub (Something As WhateverClass)
Something = New WhateverClass 'will result in no changes when outside this method
Something.Property1 = "Test" 'will result in an updated property when outside this method
End Sub
から [〜#〜] msdn [〜#〜] :
参照型の値は、メモリ内の他の場所にあるデータへのポインタです。つまり、参照型を値で渡すと、基になる要素自体にアクセスできない場合でも、プロシージャコードには基になる要素のデータへのポインターが含まれます。たとえば、要素が配列変数の場合、プロシージャコードは変数自体にはアクセスできませんが、配列のメンバーにはアクセスできます。
この投稿はあなたの質問をカバーしているようです:
ですから、古い行動をとる方法はありません。今後はByVal
がデフォルト(以前のバージョン)になり、メソッドのパラメーターに自動的に追加されなくなります。
私の意見では、これはVB.NETをC#との整合性を高め、不要な「ノイズ」を回避しているため(これは既に十分詳細です)、適切な決定です。
古い行動:
Private Sub test(ByVal test As String)
End Sub
新しい行動
Private Sub test(test As String)
End Sub
ルーチンをVBAに転送する場合は注意してください。デフォルトはByRef
です(たとえば、 このページの下部 にある「パラメーターを渡すデフォルトの方法」==、偉大なチップピアソンによる)。 。面倒なこともあります。