Являются ли параметры по умолчанию плохой практикой в ​​ООП? - PullRequest
9 голосов
/ 08 марта 2009

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

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

Ответы [ 7 ]

11 голосов
/ 08 марта 2009

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

3 голосов
/ 08 марта 2009

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

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

2 голосов
/ 08 марта 2009

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

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

1 голос
/ 08 марта 2009

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

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

1 голос
/ 08 марта 2009

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

1 голос
/ 08 марта 2009

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

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

нажмите

нажмите

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

1 голос
/ 08 марта 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...