在 VB.NET 中调用过程的优缺点是啥?

Posted

技术标签:

【中文标题】在 VB.NET 中调用过程的优缺点是啥?【英文标题】:What is pros and cons of calling procedures in VB.NET?在 VB.NET 中调用过程的优缺点是什么? 【发布时间】:2010-12-23 07:34:06 【问题描述】:

我想知道在VB.NET中使用Call Keyword和不使用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

提前谢谢大家。

【问题讨论】:

【参考方案1】:

即使在 2019 年,Call 语句仍然具有相关性:“当被调用的表达式不以标识符开头时,您通常会使用 Call 关键字。不建议将 Call 关键字用于其他用途。”

Call Statement (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

【讨论】:

【参考方案2】:

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

例如

Call (new MyType()).MySub()

相当于

dim anInstance = new MyType
anInstance.MySub

【讨论】:

使用默认实例不是更简洁吗?即只是MyType.MySub() @Michael,这表明您将使用静态方法。该方法不是静态的。我认为VB确实允许这样做,但它相当混乱。绝对是当你来自 C# bgnd 时。 @BorisCallens 在任何情况下,Call 都是不必要的。你可以写(new MyType()).MySub() @Dan 在VB中你不能。或者至少你不能(注意帖子的时间戳)。现在在 C# 中工作,所以最近没有尝试过。 我一直依赖的黑客是DirectCast(new MyType(), MyType).MySub()Call 看起来确实是一个更干净的选择。【参考方案3】:

来自here:

您通常使用 Call 语句来调用不 返回一个值。如果过程返回一个值,调用语句 丢弃它。

调用时不需要使用 Call 语句 程序。但是,它提高了代码的可读性。

所以,本质上,ProOne() 和 Call ProOne() 在语义上是等价的。

【讨论】:

【参考方案4】:

没有优点,也没有缺点。

Call 关键字是旧 VB 方言的遗留关键字。

在 VB.net 中它没有任何意义,是语法糖。

【讨论】:

【参考方案5】:

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

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

【讨论】:

虽然我同意你的观点,但我不明白为什么愿意切断所有联系的人不会只使用 C# 而不是 VB.NET。熟悉语法几乎是 VB.NET 唯一要做的事情。【参考方案6】:

来自文档

将控制权转移到函数、子、 或动态链接库 (DLL) 程序。 [ 呼叫 ] 程序名称 [ (参数列表)]

所以,

您通常使用 Call 语句来 调用不返回的过程 一个值。如果该过程返回一个 值,Call 语句将其丢弃。

您不需要使用通话 调用过程时的语句。 但是,它提高了可读性 你的代码。

【讨论】:

“但是,它提高了代码的可读性”。看个人口味,我自己受不了,从不使用:)

以上是关于在 VB.NET 中调用过程的优缺点是啥?的主要内容,如果未能解决你的问题,请参考以下文章

VB.NET中CallbyName函数的缺点?

部署 VB.NET 应用程序的最佳方式是啥?

远程过程调用的优缺点是啥

C# 和 VB.NET 的优缺点?

VB.net 和C#.net 各有啥优缺点

VB.net 和C#.net 各有啥优缺点