2016-10-07 3 views
-4

Доброе утро,Статические и нестатические методы

Я работаю над WindowsForm. Я придумал 2 решения. Я хотел бы знать, какое решение следует придерживаться?

Решение 1: У меня есть написал общие статических метод для проверки, как телефон-текстового поле, mandatory_textbox ключа пресса etc.I имеет много общих методов, как это. Итак, что я сделал, я создал класс утилиты и разместил все эти статические методы. Затем использовались эти методы в приложении.

Решение 2: я получил представление о том, так что я сделал это я создал BaseForm-наследуется Форма класса, тогда я унаследовал эту BaseForm во всех других формах (наследование Многоуровневого).

В baseform я переместил все методы проверки из класса Utility и сделал нестатический.

Я также преподавал о UserControl. Если я сделаю это, я снова работаю с задачами выравнивания. Так что только придумали два решения:

Итак, можете ли вы предложить, что следует соблюдать?

+0

http://stackoverflow.com/questions/798036/how-to-decide-between-c-sharp-static-and-non-static-methods?rq=1 – Natrium

+0

http://stackoverflow.com/questions/11027540/should-i-go-with-static-methods-or-non-static-методы? Rq = 1 – Natrium

+1

Вы также можете создать пользовательский TextBox путем получения из текстового поля. – CSharpie

ответ

0

Нет прямого ответа на вопрос о том, следует ли объявлять методы статическими или нет.Это зависит от контекста и функциональности вашего приложения.

Идущий с некоторыми допущениями для вашей ситуации, рассмотреть следующие мысли на высоком уровне -

  • Если проверка связана с одной определенной форме только, и не применимы для других форм, объявить его в вашей форме класса анс частный метод. Если эти проверки не требуют какого-либо экземпляра класса, вы можете объявить их статическими.
  • Если некоторые валидации являются общими для разных форм, вы можете объявить их статическими. Будьте осторожны и не проходите контроль над этими методами, вместо этого передавайте значения, которые вы хотите проверить, для лучшего дизайна.
  • Рассмотрит объявляя валидации в базовой форме только, если таковые применимы ко всем или, если не большинство форм, и опять же, если они не используют какой-либо объект, например, вы можете пометить их как статические

Хорошие обсуждение here.

0

Используйте User Control вместо отдельной формы, если эти общие элементы управления используются в каждой форме. Предполагается, что статические методы будут использоваться для удовлетворения требований типа utils.

+0

Я преподавал об управлении пользователями. Если я сделаю это, я снова работаю с задачами выравнивания. Так что только придумали два решения. – user2115618

0

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

  1. Итак, в первом случае у нас есть только один класс ststic и одна реализация всех статических методов в памяти. Мы можем применять эти методы к любому количеству экземпляров других объектов. Но нам нужен доступ к этому классу в каждом пространстве имен, где мы его будем использовать. Итак, если мы внесем некоторые изменения в любой код этого класса, он будет применяться ко всем объектам, связанным с этим классом. Иногда это удобно, иногда нет.

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

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

1

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

Например, если у вас есть класс PhoneNumberValidator, реализующий интерфейс IValidator, который имеет способ bool Validate(string phoneNumber) и передает его там, где вам нужно подтвердить номер телефона.

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

+1

Боясь, что разработчикам форм Windows не понравилось это решение, потому что вам нужно создавать больше классов, интерфейсов, менять конструкторы для реализации интерфейса там - слишком много для написания тестов, которые увеличивают количество файлов:) – Fabio

+0

@Fabio вопрос о лучшей практике, поэтому я извиняюсь за свой ответ :) – meJustAndrew

Смежные вопросы