члены актуальны при создании компонентов. Поскольку мы в ближай-
шее время компоненты создавать не планируем, то и идентификатор
internal использовать не будем.
Для применения наследования необязательно создавать высокоинтел-
лектуальные коды, наподобие приведенных выше. Как уже отмечалось, наследовать (использовать как базисный) можно и стандартный, библи-
отечный класс. В качестве простой иллюстрации рассмотрим процесс
создания программы с графическим интерфейсом, который состоит из
одного-един ст вен ного, более чем скромного окна. Для выполнения этой
миссии мы на основе библиотечного класса Form путем наследования соз-
дадим собственный класс, через который, собственно, и реализуем окон-
ную форму.
Здесь речь идет о создании пользовательской оконной формы про-
граммными методами, без использования графического конструктора.
Для этих целей предназначен класс Form. Создание формы означает
на самом деле создание объекта этого класса. Другими словами, мы
могли бы просто в программе создать объект класса Form, а затем
с помощью статического метода Run() класса Application отобразить
эту форму на экране компьютера. На практике поступают несколь-
ко иначе, а именно, на основе класса Form создают производный
класс, сразу прописав нужные свойства/характеристики и определив
важные настройки. Для создания оконной формы создают объект
этого производного класса. Этим мы и собираемся заняться в самое
ближайшее время.
Полезный в нашей работе программный код представлен во всей красе
в листинге 2.6.
Листинг 2.6. Наследование класса Form
using System;
using System.Windows.Forms;
// Наследуется класс Form:
class MyForm:Form{
// Конструктор класса с текстовым аргументом:
public MyForm(string txt){
// Заголовок окна:
Наследование и уровни доступа 79
Text=txt;
// Высота окна:
Height=100;
// Ширина окна:
Width=300;
}
}
class MyFormDemo{
// Единый поток:
[STAThread]
// Главный метод программы:
public static void Main(){
// Создание объекта окна:
MyForm mf=new MyForm("Всем большой привет!");
// Отображение формы:
Application.Run(mf);
}
}
В результате выполнения этого программного кода появляется окно, по-
казанное на рис. 2.4.
Рис. 2.4. Такое простое окно отображается в результате выполнения программы
Окно, как уже отмечалось, настолько простое, что даже комментировать
его внешний вид нет никакой возможности — ни кнопок, ни переключате-
лей. Из всех декоративных атрибутов — только строка заголовка. Это окно
можно перемещать, изменять (с помощью мышки) его размеры, свернуть/
развернуть, а также закрыть с помощью системной пиктограммы в правом
верхнем углу окна. Но, несмотря на такую простоту, окно это примечатель-
но тем, что является первым нестандартным окном, с которым мы имеем
дело в этой книге, созданным собственноручно.
Думается, излишне напоминать, что данная программа реализуется
в среде Visual C# Express как Windows-проект.
Теперь разберем по кирпичикам наш чудесный код, выполнение которого
приводит к столь примечательным результатам. Начнем с класса MyForm,
80
Глава 2. Классы и объекты
который создается на основе класса Form. Процесс наследования стан-
дартный: после имени создаваемого производного класса через двоеточие
указываем имя базового класса. После этого в фигурных скобках описы-
ваем дополнительный код. В данном случае это код конструктора класса
MyClass. Мы описали лишь один конструктор с текстовым аргументом.
Этот аргумент используется при присваивании значения полю Text.
Поле наследуется из класса Form. Значение этого поля определяет заго-
ловок создаваемого окна. Другим словами, если мы будем реализовывать
оконную форму через объект класса MyForm, в строке названия этого окна
будет текст, присвоенный в качестве значения полю Text. Поля Height и Width ответственны за высоту и ширину окна (в пунктах) соответствен-
но. В конструкторе этим полям также присваиваются значения (целочис-
ленные).
У класса Form имеются всевозможные поля (точнее, свойства — но
пока это не принципиально) и методы, которые наследуются при
создании на основе класса Form производного класса MyForm.
Каждое поле определяет некоторое свойство или характеристику
оконной формы. Поэтому настройка параметров оконной формы
сводится в основном к присваиванию правильных значений по-
лям/свойствам объекта, через который эта форма реализуется.
В рассматриваемом примере такая настройка выполняется прямо
в конструкторе.
В главном методе программы инструкцией MyForm mf=new MyForm("Всем боль-
шой привет!") создается объект mf класса MyForm. Это объект для оконной
формы. Аргументом конструктору передан текст, который будет впослед-
ствии отображаться в строке названия оконной формы. Но создание объ-
екта еще не означает, что форма появится на экране. Мы ее пока только
создали, и она надежно хранится в «закромах родины». А вот чтобы из-
влечь ее на свет божий, нужна команда Application.Run(mf). Из класса
Application вызывается статический метод Run(), аргументом которому