Ключевое слово “Перегрузок” в VB.NET

OpenID о проверке подлинности (то есть о том, кто вы есть), OAuth об авторизации (то есть о предоставлении доступа к функциям / данным / и т. Д. Без необходимости иметь дело с оригинальной аутентификацией).

OAuth может использоваться на сторонних партнерских сайтах для предоставления доступа к защищенным данным без повторной аутентификации пользователя.

В блоге « OpenID против OAuth с точки зрения пользователя » содержится простое сравнение этих двух с точки зрения пользователя и « OAuth-OpenID: вы лаете неверное дерево, если вы думаете, что это одно и то же "имеет больше информации об этом.

16
задан 23 July 2009 в 17:22
поделиться

5 ответов

В том же классе ключевое слово Overloads необязательно, но если объявлен один метод Overloads или Overrides , вы должен использовать его для всех перегрузок этого метода.

' this is okay
Sub F1(s as String)
Sub F1(n as Integer)

' This is also okay
Overloads Sub F2(s as String)
Overloads Sub F2(n as Integer)

' Error
Overloads Sub F3(s as String)
Sub F3(n as Integer)

Однако становится сложнее, когда вы перегружаете методы базового класса в производном классе.

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

См. MSDN для получения более подробной информации.

16
ответ дан 30 November 2019 в 15:52
поделиться

Это было соображением дизайна. Конечно, он (VB) мог быть разработан для вывода о перегрузке по сигнатуре функции (как в C #) - поэтому само ключевое слово Overloads могло быть опущено, но в конечном итоге оно просто соответствует выразительности Visual Basic (что некоторые считают накладными расходами) и это было всего лишь дизайнерское решение языка.

9
ответ дан 30 November 2019 в 15:52
поделиться

Мики Д. прав. Нет никакой разницы между перегруженным методом, объявленным Overloads, и другим, который этого не делает.

Я просто хотел указать, что ключевое слово Overloads является обязательным, когда другой метод с тем же именем объявлен Overrides или Overloads. Например, если вы переопределите метод Equals следующим образом:

Public Overrides Function Equals(ByVal obj As Object) As Boolean ...

Затем вы хотите создать такую ​​перегрузку:

Public Function Equals(ByVal otherProduct As Product) As Boolean ...

Вы получите следующую ошибку:

"function 'Equals' must be declared 'Overloads' because another 'Equals' 
is declared 'Overloads' or 'Overrides'."

Вы получите ту же ошибку, если кто-то объявил метод как Перегрузки, и вы хотите перегрузить этот метод. Вам придется либо добавить ключевое слово Overloads в свой метод, либо удалить его из другого метода.

Я лично никогда не объявляю перегруженный метод Overloads, если у меня нет выбора, как в ситуации выше.

3
ответ дан 30 November 2019 в 15:52
поделиться

Ключевое слово Overloads - совершенно необязательно - я не вижу преимуществ в его использовании.

0
ответ дан 30 November 2019 в 15:52
поделиться

Я столкнулся с ситуацией, когда от меня требовалось использовать ключевое слово Overloads.

У меня был родительский класс и унаследованный класс.

Public Class DataManager

   Public MustOverride Function LoadDataSet(ByVal TableName as String, ByVal SQL as SQLObject) as DataSet

   Public Function LoadDataSet(ByVal TableName as String, ByVal SQL as String) as DataSet
     Return LoadDataSet(TableName, new SQLObject(SQL))
   End Function
End Class

Public Class OracleDataManager
  Inherits DataManager

  Public Overloads Overrides Function LoadDataSet(ByVal TableName as String, ByVal SQLObj as SQLObject) as DataSet
    // code here
  End Function

End Class

В этом примере мне пришлось использовать ключевое слово overloads.

2
ответ дан 30 November 2019 в 15:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: