Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции C# Часть 2 с желтым.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
617 Кб
Скачать
☆

Принцип распределения ответственности

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

class Program

{ public static void Main()

{ Application.Run(new MainWindow()); }

}

class MainWindow:Form

{ private int FormHeight = 300;

private int FormWidth = 500;

private Button b1;

private Button b2;

public MainWindow()

{

this.ClientSize = new Size(FormWidth, FormHeight);

//создание и настройка первой кнопки

b1 = new Button();

b1.Left = FormWidth / 5; b1.Top = FormHeight / 3;

b1.Width = FormWidth / 5;b1.Height = FormHeight / 3;

b1.Click += ButtonClick;

//создание и настройка второй кнопки

b2 = new Button();

b2.Bounds = new Rectangle(3 * FormWidth / 5, FormHeight / 3, FormWidth / 5, FormHeight / 3);

b2.Click += ButtonClick;

//добавление кнопок на форму

this.Controls.Add(b1);

this.Controls.Add(b2);

}

private void ButtonClick(object sender, EventArgs ea)

{

((Button)sender).Text = DateTime.Now.ToString();

}

}

Прокомментируем изменения.

    1. Самое главное – за создание формы отвечает класс MainWindow, производный от стандартного класса Form. Это значит, что объекты нашего нового класса полностью унаследовали возможности стандартных окон.

    2. Класс программ стал чрезвычайно коротким – его задачей является выполнить при запуске программы (метод Main!) 2 действия – создание объекта класса MainWindow, а затем запуск цикла обработки событий для этого объекта-формы. Это типичная ситуация для оконных приложений, поэтому в дальнейших программах класс Program почти всегда будет оставаться именно таким. Вы даже можете забыть о его существовании ().

    3. Первое, что происходит при запуске программы – создание окна. А за создание объектов классов, как известно, отвечают конструкторы. Основную часть текста программы как раз и составляет конструктор класса MainWindow. Теперь объекты-кнопки представлены переменными класса MainWindow. Переменная f пропала – ее представляет ключевое слово this.

    4. Обработчик щелчка – метод класса MainWindow.

Почему такая структура предпочтительнее. Пока без доказательств (а строгие доказательства здесь вряд ли возможны) повторим заголовок данного параграфа: в такой структуре программа разбита на несколько частей (классов), между которыми правильно распределены ответственности – именно такой подход называют принципом «разделяй и властвуй» в программировании. Следуя этому принципу, мы сможем создавать большие и, в то же время, не слишком сложные программы.

Замечание! Если Вы попытаетесь открыть в VisualStudio файл, содержащий такой исходный код, то получите сообщение об ошибке следующего содержания:

«The class MainWindow can be designed, but is not the first class in the file. Visual Studio requires that designers use the first class in the file. Move the class code so that it is the first class in the file and try loading the designer again.»

В свободном переводе это означает следующее – визуальному дизайнеру «не нравится», что класс формы не первый в файле. Строго говоря, это не ошибка. Но зато если Вы просто переместите класс MainWindow в начало, то сможете и увидеть Вашу форму в режиме дизайна еще до запуска программы.