Являются ли параметры по умолчанию плохой практикой в ​​ООП?

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

  •  05-07-2019
  •  | 
  •  

Вопрос

Параметры по умолчанию для методов нарушают инкапсуляцию?

Что послужило причиной отсутствия параметров по умолчанию в C #?

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

Решение

Я бы взял этот в качестве " официальный & Quot; ответ от Microsoft. Однако параметры по умолчанию (и именованные) будут определенно доступны в C # 4.0.

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

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

Добавление " Другой способ сделать то же самое " это всегда компромисс. В некоторых случаях это может быть удобно. Но чем больше синтаксиса вы делаете легальным, тем сложнее становится изучать язык, и тем больше вы можете защищать себя, не допуская дальнейшего расширения. (Возможно, однажды они придумали другое расширение для языка, в котором используется аналогичный синтаксис. Тогда это было бы невозможно добавить, потому что это противоречило бы функции, которую они добавили ранее)

Как уже отмечалось, параметры по умолчанию не были приоритетной функцией, но, вероятно, будут добавлены в C # 4.0. Тем не менее, я считаю, что были веские причины не включать его ранее (в 4.0, насколько я понял, он в основном должен поддерживать стили программирования для утиной печати , где параметры по умолчанию повышают совместимость типов).

Я считаю, что избыточные списки параметров (безусловно, более 4-5 различных параметров) - это запах кода . Параметры по умолчанию сами по себе не являются злом, но рискуют спровоцировать плохой дизайн, задерживая рефакторинг в большее количество объектов.

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

Параметры по умолчанию будут включены в C # 4.0

Некоторые материалы для чтения об этом:

нажмите

нажмите

Также кажется, что автор этот пост в ближайшем будущем опубликует статью о том, почему MS решает использовать параметры по умолчанию в C #

Вот ответ, почему это не предусмотрено в C # http://blogs.msdn.com/csharpfaq/archive/ 2004/03/07 / 85556.aspx

Недостатком реализации параметров по умолчанию в C # 4.0 является то, что она создает зависимость от имени параметров. Это уже существовало в VB, что могло быть одной из причин, почему они решили реализовать его в 4.0.

Другим недостатком является то, что значение по умолчанию зависит от того, как вы отлили свой объект. Вы можете прочитать об этом здесь: http://saftsack.fs.uni-bayreuth.de/~dun3/archives/optional-parameters-conclusion-treat-like-unsafe/216.html .

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