Необходимо ли объявить методы с помощью перегрузок или дополнительных параметров в C# 4.0?

Swift 3:

myButton.titleLabel?.font = myButton.titleLabel?.font.withSize(40)
91
задан Greg Beech 30 October 2008 в 21:42
поделиться

3 ответа

Я определенно буду использовать функцию необязательных параметров 4.0. Это избавляет от нелепого ...

public void M1( string foo, string bar )
{
   // do that thang
}

public void M1( string foo )
{
  M1( foo, "bar default" ); // I have always hated this line of code specifically
}

... и помещает значения там, где вызывающий может их видеть ...

public void M1( string foo, string bar = "bar default" )
{
   // do that thang
}

Гораздо проще и меньше подвержено ошибкам. Я действительно видел это как ошибку в случае перегрузки ...

public void M1( string foo )
{
   M2( foo, "bar default" );  // oops!  I meant M1!
}

Я еще не играл с компилятором 4.0, но я не был бы шокирован, узнав, что компилятор просто генерирует перегрузки для вас.

7
ответ дан 24 November 2019 в 06:47
поделиться

Я всегда использовал Delphi с необязательными параметрами. вместо этого я переключился на использование перегрузок.

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

И мне нравится идея, что обычно существует один супер метод, а остальные представляют собой более простые оболочки вокруг него.

11
ответ дан 24 November 2019 в 06:47
поделиться

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

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

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

3
ответ дан 24 November 2019 в 06:47
поделиться
Другие вопросы по тегам:

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