2012-02-09 7 views
28

Visual Studio 2010 Service Pack(Windows Updateで提案されている)をインストールしましたが、「intellisense」という新しい機能が表示されます。これは、VB.NETでFunctionまたはSubを書き込むと、 ByRefまたはByVal ...ByVal/ByRefをそれ以上表示する必要がないのはなぜですか?

1)このオプションを元の状態に戻すことができますか?

2)ByXを指定しないと、どちらがデフォルトで使用されますか?それはこの記事があなたの質問をカバーしているようだ

+2

デフォルトではByValですが、実際にはどのような値と参照によるものなのかを理解していることを確認してください(http://msdn.microsoft.com/en-us/library/ddck1z30.aspx)。 –

+9

ほとんどの場合、ByValを渡したいと思っています。これは実際にはデフォルトです。コードがByValであちこちに詰まっている理由はありません。それはちょうど「ノイズ」です。あなたが絶対に参照渡しセマンティクスを持っている必要があるときだけ、 'ByRef'を明示的に指定してください。 –

答えて

17

ティムは、あなたが直接尋ねたが、心に留めておくべき何か他のものが何であるかをカバーしているユーザー定義のクラスのような任意の参照型変数、でも値渡しであれば、そのインスタンスのプロパティなどを変更することができます。ただし、オブジェクト全体を変更することはできません。それはMSDNから参照することにより

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 

をデフォルトすることがあなたに見えた理由かもしれ:

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

+0

この回答は「参照型の価値がどのように働くか」を説明しているので誤解を招くことがありますが、「なぜByVal/ByRefをもう指定する必要はないのですか」という質問があります。 – mchar

31

(それは常にByRefであるように思える):

http://msmvps.com/blogs/carlosq/archive/2011/03/15/vs-2010-sp1-changing-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 
+0

要点答えに簡潔でまっすぐに! – mchar

8

デフォルトはByRefでVBA、(大きなチップピアソンによって、例えば、the bottom of this pageで「パラメータを渡すデフォルトの方法」を参照)へのルーチンを転送するときに注意してください。 これは面倒なことがあります。

関連する問題