2009-12-04 6 views
6

VB.NETでCall KeywordとCallなしでプロシージャをコールする際の長所と短所を知りたいですか?VB.NETで手続きを呼び出す賛否両論は何ですか?

Private Sub ProOne() 
    // Code Are Here 
End Sub 

Private Sub Calling() 
    ProOne()   // I would like to know pros and cons of this 
    Call ProOne()  // And I would like to know pros and cons of this 
End Sub 

ありがとうございました。

答えて

10

hereから:

あなたは、通常 値を返さないプロシージャを呼び出すには、Callステートメントを使用します。プロシージャが値を返す場合、Callステートメント はそれを破棄します。

プロシージャを呼び出すときにCallステートメントを使用する必要はありません。ただし、コードの可読性が向上します。

したがって、本質的に、ProOne()とCall ProOne()は意味的に同等です。ドキュメントから

12

賛否両論はありません。

Callキーワードは、古いVBの方言のレガシーキーワードです。

VB.netでは意味がなく、合成糖です。

2

転送ファンクション、サブ、 またはダイナミックリンクライブラリ(DLL) プロシージャに制御します。 [通話] PROCEDURENAME [ (ArgumentListは)]

ので、

あなたは、通常 コール 値を返さないプロシージャにCallステートメントを使用します。プロシージャが の値を返す場合、Callステートメントは値を破棄します。

手順を呼び出すときに コールステートメントを使用する必要はありません。 ただし、コードの可読性が向上します 。

+7

Call (new MyType()).MySub() 

同等たとえば

は、 "しかし、それはあなたのコードの可読性を向上させること"。 –

3

技術的には同等ですが、私は「コール」の使用に反対します。 VB6からVB.Netに移行する際には、まったく異なる言語で書かれていなければならないということを、現実的には重要です。残念ながら、MicrosoftはVB6開発者のサポートを提供したいと考えていましたが、VB6の機能に似た機能を追加することでこれを実現しましたが、.Net同等のものよりもかなり劣っています。

すべてのVB6ホールドオーバーを使用すると、開発者はできるだけ早くこれらのビットの使用をやめ、コード出力を向上させることができます。

+0

私はあなたに同意しますが、なぜなら、すべての関係を切って欲しい人は、VB.NETの代わりにC#を使用するだけの理由がわかりません。構文の親しみやすさは、VB.NETが唯一のことです。 – Dan

6

私が見つけた面白い使い方(R#が示唆)は、単一のメソッドを呼び出してガベージコレクションのマークを付けるだけのインスタンスを作成する必要があるときでした。
私がそれを維持しているかどうかはわかりません。

dim anInstance = new MyType 
anInstance.MySub 
+0

デフォルトのインスタンスをより簡潔に使用しませんか?すなわち 'MyType.MySub()' – Michael

+0

@Michael、これは静的メソッドを使用することを示唆しています。このメソッドは静的ではありません。私はVBがこれを確かに許していると思うが、むしろ混乱している。間違いなくC#bgndから来たとき。 –

+0

@BorisCallensコンストラクタに何も渡していないのであれば、デフォルトのインスタンスを使用するだけでなく、新しいインスタンスをインスタンス化する方法が混乱することはありません。 – Dan

関連する問題