Каковы плюсы и минусы вызова процедур в VB.NET? - PullRequest
6 голосов
/ 04 декабря 2009

Хотелось бы узнать плюсы и минусы процедуры вызова с 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

Заранее всем спасибо.

Ответы [ 6 ]

13 голосов
/ 04 декабря 2009

Нет плюсов и нет минусов.

Ключевое слово Call - это устаревшее ключевое слово из старых диалектов VB.

В VB.net это не имеет смысла и является синтетическим сахаром.

11 голосов
/ 04 декабря 2009

С здесь :

Обычно вы используете оператор Call для вызова процедуры, которая не вернуть значение. Если процедура возвращает значение, оператор Call отбрасывает его.

Вы не обязаны использовать оператор Call при вызове процедура. Тем не менее, это улучшает читабельность вашего кода.

Итак, по сути, ProOne () и Call ProOne () семантически эквивалентны.

7 голосов
/ 11 апреля 2012

Одно интересное использование, которое я нашел ( R # рекомендуется), было, когда вам нужно создать экземпляр, просто чтобы вызвать один метод, а затем пометить его для сборки мусора. Хотя я не уверен, что сохраню.

Например

Call (new MyType()).MySub()

эквивалент

dim anInstance = new MyType
anInstance.MySub
3 голосов
/ 04 декабря 2009

Хотя они технически эквивалентны, я бы не стал использовать «Call». При переходе с VB6 на VB.Net важно понимать, что это совершенно разные языки, для которых нужно писать совершенно разными способами. К сожалению, Microsoft хотела предоставить поддержку разработчикам VB6, и они предоставили это, добавив функциональность, которая имитирует функциональность VB6, но существенно уступает аналогу .Net.

Прерывание всех связей с любым из удерживающих устройств VB6 заставит разработчиков прекратить использовать эти биты как можно быстрее и приведет к лучшему выводу кода.

2 голосов
/ 04 декабря 2009

Из документации

Передает управление функции, суб, или динамически подключаемая библиотека (DLL) процедура. [Call] имя_процесса [ (argumentsList)]

так

Вы обычно используете оператор Call для вызвать процедуру, которая не возвращает ценность. Если процедура возвращает значение, оператор Call отклоняет его.

Вы не обязаны использовать Call заявление при вызове процедуры. Тем не менее, это улучшает читаемость вашего кода.

0 голосов
/ 03 апреля 2019

Оператор Call сохраняет свою актуальность даже в 2019 году: «Обычно вы используете ключевое слово 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
...