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

StackOverflow https://stackoverflow.com/questions/304389

  •  08-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

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

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

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

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

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

Другие советы

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

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

К вашему сведению

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top