Какой вид сигнатуры метода Вы предпочитаете и почему?

Хорошо, это, вероятно, очень субъективно, но здесь это прибывает:

Давайте предположим, что я пишу метод, который возьмет printscreen некоторого региона экрана. Какую сигнатуру метода Вы предпочли бы и почему?

  1. Побитово отобразите DoPrintScreen (интервал x, интервал y, международная ширина, международная высота);
  2. Побитово отобразите DoPrintScreen (Прямоугольник реагируют);
  3. Побитово отобразите DoPrintScreen (Точка точки, размер Размера);
  4. Другое

Почему?

Я продолжаю видеть меня неоднократно реализующий обоих 2) 1) и 2) (перенаправляющий одного из них к другому), но я заканчиваю тем обычно просто, что использовал одного из них, таким образом, действительно нет никакого смысла в наличии обоих. Я не могу решить, который был бы лучше. Возможно, я должен использовать подпись, которая смотрит больше всего с методом, который я буду называть для создания printscreen?

5
задан devoured elysium 12 May 2010 в 16:18
поделиться

11 ответов

Лучший вариант -

Bitmap DoPrintScreen(Rectangle screenArea);

Если вы думаете о параметрах метода как о части "концепции", в данном случае концепции области экрана, то другие варианты недостаточно хорошо абстрагируют эту концепцию.

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

2
ответ дан 18 December 2019 в 05:43
поделиться

Прямоугольник лучше всего описывает поведение функции (по крайней мере, я надеюсь, что это так!) X и Y связываются с шириной и высотой, чтобы определить прямоугольник; они не являются произвольными несвязанными переменными.

4
ответ дан 18 December 2019 в 05:43
поделиться

Я бы выбрал 2)

Bitmap DoPrintScreen(Rectangle rect); 

Как сказал Марк, параметры можно поменять местами следующим образом:

Bitmap DoPrintScreen(int x, int y, int width, int height); 

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

Bitmap DoPrintScreen(Point point, Size size);

Конечно это только мое мнение конечно !!!

3
ответ дан 18 December 2019 в 05:43
поделиться

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

... Таким образом, это удобство для ваших пользователей при минимальных усилиях с вашей стороны. Win/Win.

1
ответ дан 18 December 2019 в 05:43
поделиться

Все 3. Как вы сказали, вы собираетесь перенаправить их двум любым, кто так, почему бы не оставить всех троих? Я действительно думаю, что вам следует изменить имя параметра Rectangle на что-то более значимое, например printArea.

ура.

0
ответ дан 18 December 2019 в 05:43
поделиться

Rectangle, вероятно, наиболее понятен, поскольку аргумент не зависит от позиции. Пользователю будет легко случайно поменять местами x и y или width и height.

Point/Size также лучше, чем x-y-width-height, и иногда дополнительная явность может быть немного более понятной для чтения.

Но в конечном итоге нет веских причин не использовать все три перегрузки.

1
ответ дан 18 December 2019 в 05:43
поделиться

Это зависит от обстоятельств. Если это библиотека для общего пользования, обязательно добавьте все три. Платформа .NET, особенно GDI +, полна примеров этого. Если преобразование тривиально, это не составит большого труда, и ваши пользователи будут благодарны.

Если это просто внутренний класс, я бы выбрал вариант, который проще всего использовать с сайта вызова. Например, если вызывающий абонент уже имеет доступный Rectangle , перегрузка Rectangle лучше. Если существует несколько сайтов для звонков с разными предпочтениями, вероятно, лучше также добавить несколько перегрузок.

13
ответ дан 18 December 2019 в 05:43
поделиться

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

2
ответ дан 18 December 2019 в 05:43
поделиться

Я думаю, вам следует выбрать версию, которая лучше всего соответствует другим методам, которые будут использоваться вместе с вашим кодом. Я имею в виду методы .Net и методы из других стандартных или распространенных сторонних библиотек. Таким образом, код выглядит единообразно, и одни и те же объекты могут быть напрямую переданы другим методам.

1
ответ дан 18 December 2019 в 05:43
поделиться

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

В конкретном случае метода захвата экрана перегрузка с параметром Rectangle , вероятно, будет наиболее удобной, поскольку формы всегда имеют связанный с ними прямоугольник. Кроме того, если вам нужно повторно захватить одну и ту же область экрана, проще сохранить одну переменную ( Rectangle ), чем четыре (x, y, ширина и высота).

3
ответ дан 18 December 2019 в 05:43
поделиться

Оба - 1 и 2. И еще один без параметров для полноэкранного режима =)

Иногда вы разделяли x, y, ширину, высоту, иногда вы уже имеют прямоугольник. Вариант 3 - ИМХО очень редко =) Но пользователь всегда может преобразовать значения в прямоугольник или разбить прямоугольник на значения) Я думаю, что это философский вопрос.

Так что составьте их все или выберите один случайным образом)))

0
ответ дан 18 December 2019 в 05:43
поделиться
Другие вопросы по тегам:

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