Почему у метода Main в VB есть слово «перегрузки»? - PullRequest
0 голосов
/ 13 августа 2011

Исходя из C # ...

Я смотрел на этом сайте

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

И заметил, что там написано

public static void Main(string[] args) {

эквивалентно

Overloads Shared Sub Main(ByVal args() As String) 

Так ... что это за "перегрузки"?

Ответы [ 4 ]

3 голосов
/ 13 августа 2011

Это ошибка, ничего не перегружается. Предварительно запеченный Sub Main () не существует нигде, особенно в классе с именем HelloWorld. Это работает, потому что компилятор vb.net не очень требователен к этому. Вставьте этот код в класс, чтобы убедиться в этом:

Class Test
    Overloads Sub IdontOverloadAnything()

    End Sub
End Class

Компилятор VB.NET стремится творить чудеса. Это не один из тех случаев, магия Main () находится в CLR. Большинство программистов на C # считают это ошибкой в ​​языке. Я не могу не согласиться.

2 голосов
/ 13 августа 2011

Поскольку стандартная основная подсистема не имеет параметров, и вы перегружаете ее новой процедурой Main с параметрами.

0 голосов
/ 13 августа 2011

Потому что есть стандартная Shared Sub Main, и вы перегружаете ее. Вы можете опустить перегрузки.

0 голосов
/ 13 августа 2011

В VB6, как и в большинстве "древних" языков программирования, существовал принцип "Может быть только один!"(см. фильм "Горец").Вы можете иметь только одну функцию или подпрограмму с одинаковым именем в модуле или в классе.В VB.NET, как и в C #, у вас может быть несколько методов с одинаковыми именами, если они имеют разные подписи.Это означает, что они должны иметь разное количество параметров или разные типы параметров.Эти функции, как говорят, перегружены.В VB вы можете добавить необязательное ключевое слово Overloads к таким функциям или подпрограммам.

Public Sub Test(s As String)
Public Sub Test(i As Integer)
Public Sub Test(s As String, i As Integer)

Это будет нормально.Однако

Public Sub Test(t As String)

не будет, так как уже существует перегруженный метод с одним строковым параметром.Различных имен параметров недостаточно.

...