Перегрузка функций против параметров по умолчанию в VB.NET? - PullRequest
6 голосов
/ 20 ноября 2008

Что лучше использовать в VB.NET: перегрузка функций или параметры по умолчанию?

Ответы [ 3 ]

9 голосов
/ 20 ноября 2008

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

Если перегрузка допускает другой тип параметра или является семантически другим параметром, который подпрограмма будет по-разному интерпретировать, тогда перегрузки будут иметь больше смысла.

4 голосов
/ 20 ноября 2008

Будет ли код использоваться другими языками? Если это так, то это меняет баланс в сторону перегрузок, в то же время помня ответ Хэмиша. В частности, C # не поддерживает необязательные параметры - пока ...

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

Если параметров много, и они логически представляют что-то, вы можете рассмотреть возможность их инкапсуляции, точно так же, как Process работает с ProcessStartInfo. Это особенно хорошо в C # из-за инициализаторов объектов.

Если это для строительства, вы можете также рассмотреть шаблон строителя как вариант этого. Например, в буферах протокола я могу сделать что-то вроде:

Person jon = new Person.Builder { Name="Jon", Age=32,
                                  Spouse="Holly", Kids=3 }.Build();

, который в итоге становится очень читабельным, в то же время создавая человека за один раз (в одном выражении, без необходимости мутировать самого человека - действительно, тип сообщения является неизменным; это только строитель, который не является).

0 голосов
/ 17 июля 2010

FYI

Если вы хотите добавить параметр в функцию или метод, который вызывается из других сборок, то:

Вы можете перегрузить, сделав дополнительную функцию с дополнительным параметром.

Или вы можете добавить необязательный параметр, НО: вам нужно перекомпилировать все сборки, которые вызывают эту функцию, даже если им не нужно использовать новый необязательный параметр! Обычно это не то, чего ожидают люди (особенно те, которые привыкли к тому, как работает VB6). По сути, вы не можете вставить новый необязательный параметр в функцию и ожидать, что он будет полностью обратно совместим. Кроме того, насколько я понимаю, если вы измените значение по умолчанию, вам нужно перестроить все вызывающие сборки, чтобы изменения работали.

...