6

VB.NETでCallキーワードを使用し、Callを使用せずにプロシージャを呼び出すことの長所と短所を知りたいですか?

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

よろしくお願いします。

4

6 に答える 6

13

長所も短所もありません。

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

VB.netでは意味がなく、糖衣構文です。

于 2009-12-04T16:32:55.783 に答える
11

ここから:

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

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

したがって、本質的に、ProOne()とCall ProOne()は意味的に同等です。

于 2009-12-04T16:33:42.400 に答える
7

私が見つけた興味深い使用法の1つ(R#が提案)は、単一のメソッドを呼び出すためだけにインスタンスを作成し、それをガベージコレクション用にマークする必要がある場合でした。
私がそれを維持しているかどうかはわかりませんが。

例えば

Call (new MyType()).MySub()

に相当

dim anInstance = new MyType
anInstance.MySub
于 2012-04-11T15:33:56.080 に答える
3

それらは技術的には同等ですが、私は「呼び出し」を使用することに反対します。VB6からVB.Netに移行するときは、それらが完全に異なる言語であり、完全に異なる方法で作成する必要があることを認識することが重要です。残念ながら、MicrosoftはVB6開発者にサポートを提供したいと考えていました。彼らは、VB6機能を模倣する機能を追加することでこれを提供しましたが、.Netの同等の機能よりも大幅に劣っています。

VB6ホールドオーバーのいずれかとの関係をすべて切断すると、開発者はこれらのビットの使用をできるだけ早く停止し、コード出力を向上させることができます。

于 2009-12-04T16:41:06.270 に答える
2

ドキュメントから

制御を関数、サブルーチン、またはダイナミックリンクライブラリ(DLL)プロシージャに移します。[呼び出し]procedureName[(argumentList)]

それで、

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

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

于 2009-12-04T16:33:48.840 に答える
0

2019年でも、Callステートメントには関連性があります。「通常、呼び出された式が識別子で始まらない場合はCallキーワードを使用します。他の用途に、Callキーワードを使用することはお勧めしません。」

コールステートメント(Visual Basic)

MSDNコードサンプル:

Sub TestCall()
    Call (Sub() Console.Write("Hello"))()

    Call New TheClass().ShowText()
End Sub

Class TheClass
    Public Sub ShowText()
        Console.Write(" World")
    End Sub
End Class
于 2019-04-03T20:35:58.457 に答える