C # - Создание новых объектов по нажатию кнопки? - PullRequest
0 голосов
/ 20 декабря 2011

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

StreamReader sr = new StreamReader();

.. внутри функции нажатия кнопки.

Это плохая привычка программирования?Из javascript я помню, как читал предупреждение о каком-то написанном мною коде, в котором говорилось о создании функции внутри события тайм-аута.Должны ли все переменные и объекты быть объявлены вне функции нажатия кнопки?

Ответы [ 4 ]

2 голосов
/ 20 декабря 2011

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

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

Читатель потока читает из потока.Код, который обрабатывает поток, должен быть сгруппирован с ним.Код, который обрабатывает тот факт, что вы нажали на пользовательский интерфейс, не имеет ничего общего с чтением из потока, поэтому его следует отделить.

Как правило, вы должны сгруппировать код так, чтобы части кода, которые логически похожи, быливместе, и те части вашего кода, которые имеют дело с совершенно разными вещами, разделены.Это даст вам «высокую сплоченность ».Это связано с Принципом единой ответственности .

Должны ли все переменные и объекты объявляться вне функции нажатия кнопки?

Абсолютно нет.Если имеет смысл создавать определенный объект при обработке события пользовательского интерфейса, сделайте это.

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

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

0 голосов
/ 20 декабря 2011

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

0 голосов
/ 20 декабря 2011

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

0 голосов
/ 20 декабря 2011

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

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