2008-11-20 5 views

ответ

4

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

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

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

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

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

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

+0

Другой «Про» перегрузок - это то, что вы можете видеть, сколько ссылок имеет каждая перегрузка. Сочувствовать вы не можете с дополнительными параметрами. – Burnsys 2015-06-04 03:55:08

8

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

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

+0

отличный ответ – baash05 2008-11-20 05:42:31

0

FYI

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

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

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