34

Visual Studio 2010 Service Pack(Windows Updateで提案)をインストールしたところ、「インテリセンス」に新機能が表示されます。つまり、FunctionまたはをVB.NETで記述した場合、またはSubでパラメーターがオートコンプリートされません。 。ByRefByVal

1)とにかく、このオプションを以前の状態に戻すように構成できますか?

2)指定しない場合ByX、デフォルトで使用されるのはどれですか?(いつものようですByRef

4

3 に答える 3

44

この投稿はあなたの質問をカバーしているようです:

http://msmvps.com/blogs/carlosq/archive/2011/03/15/vs-2010-sp1-ching-quot-byval-quot-vb-net-code-editor-experience.aspx

いいえ、古い動作を取得する方法はありません。これからByValはデフォルト (以前のもの) であり、メソッドのパラメーターに自動的に追加されることはありません。

私の意見では、これは VB.NET を C# とより一貫性のあるものにし、不要な「ノイズ」を回避するため、適切な決定です (既に十分に冗長です)。

古い動作:

Private Sub test(ByVal test As String)
End Sub

新しい動作

Private Sub test(test As String)
End Sub
于 2012-02-09T08:49:15.460 に答える
20

ティムはあなたが直接尋ねたことをカバーしましたが、覚えておくべきことは、ユーザー定義クラスのような参照型変数は、たとえ値で渡されたとしても、そのインスタンスのプロパティなどに変更を加えることができるということです。ただし、オブジェクト全体を変更することはできません。これが、参照によってデフォルトになっているように見える理由かもしれません

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から:

参照型の値は、メモリ内の別の場所にあるデータへのポインターです。これは、参照型を値で渡す場合、プロシージャ コードは、基になる要素自体にアクセスできない場合でも、基になる要素のデータへのポインターを持つことを意味します。たとえば、要素が配列変数の場合、プロシージャ コードは変数自体にはアクセスできませんが、配列メンバーにはアクセスできます。

于 2012-02-09T13:26:14.593 に答える