6

I would like to know the pros and cons of calling procedures with Call Keyword and without Call in 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

Thanks in advance all.

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

我发现的一个有趣的用途(建议使用R#)是当您需要创建一个实例来调用单个方法然后将其标记为垃圾回收时。
不知道我是否保留它。

例如

Call (new MyType()).MySub()

相当于

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

尽管它们在技术上是等效的,但我反对使用“呼叫”。从 VB6 迁移到 VB.Net 时,重要的是要意识到它们是完全不同的语言,必须以完全不同的方式编写。不幸的是,微软希望为 VB6 开发人员提供支持,他们通过添加模仿 VB6 功能的功能来提供支持,但明显不如 .Net 等价物。

切断与任何 VB6 保留的所有联系将使开发人员尽快停止使用这些位,并带来更好的代码输出。

于 2009-12-04T16:41:06.270 回答
2

从文档

将控制权转移到 Function、Sub 或动态链接库 (DLL) 过程。[ 调用 ] 过程名称 [ (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 回答