Обратите внимание на то, что перед каждым объявлением переменной и метода указывается private
) в пределах класса, так открытыми (public
), т.е. более доступными. Спецификатор доступа определяет Main(),
обозначаются как открытые (public
). Это означает, что их можно использовать во всех остальных фрагментах кода — даже в тех, что определены за пределами класса. Мы еще вернемся к обсуждению спецификаторов доступа в главе 8.
-----------------------------------------------
ПРИМЕЧАНИЕ
Помимо спецификатора доступа, в объявлении члена класса могут также присутствовать один или несколько модификаторов. О модификаторах речь пойдет далее в этой главе.
-----------------------------------------------
Несмотря на отсутствие соответствующего правила в синтаксисе С#, правильно сконструированный класс должен определять одну и только одну логическую сущность. Например, класс, в котором хранятся Ф.И.О. и номера телефонов, обычно не содержит сведения о фондовом рынке, среднем уровне осадков, циклах солнечных пятен или другую информацию, не связанную с перечисляемыми фамилиями. Таким образом, в правильно сконструированном классе должна быть сгруппирована логически связанная информация. Если же в один и тот же класс помещается логически несвязанная информация, то структурированность кода быстро нарушается.
Классы, использовавшиеся в приведенных ранее примерах программ, содержали только один метод: Main(). Но в представленной выше общей форме определения класса метод Main() не указывается. Этот метод требуется указывать в классе лишь в том случае, если программа начинается с данного класса.
Для того чтобы продемонстрировать классы на конкретных примерах, разработаем постепенно класс, инкапсулирующий информацию о зданиях, в том числе о домах, складских помещениях, учреждениях и т.д. В этом классе (назовем его Building
) будут храниться три элемента информации о зданиях: количество этажей, общая площадь и количество жильцов.
Ниже приведен первый вариант класса Building
. В нем определены три переменные экземпляра: Floors, Area и Occupants
. Как видите, в классе Building
вообще отсутствуют методы. Это означает, что в настоящий момент этот класс состоит только из данных. (Впоследствии в него будут также введены методы.)
class Building {
public int Floors; // количество этажей public
int Area; // общая площадь здания
public int Occupants; // количество жильцов
}
Переменные экземпляра, определенные в классе Building,
демонстрируют общий порядок объявления переменных экземпляра. Ниже приведена общая форма для объявления переменных экземпляра:
где Building
с предваряющим их модификатором доступа public
. Как пояснялось выше, благодаря этому они становятся доступными за пределами класса Building
.
Определение class
обозначает создание нового типа данных. В данном случае новый тип данных называется Building
. С помощью этого имени могут быть объявлены объекты типа Building
. Не следует, однако, забывать, что объявление class
лишь описывает тип, но не создает конкретный объект. Следовательно, в приведенном выше фрагменте кода объекты типа Building
не создаются.
Для того чтобы создать конкретный объект типа Building
, придется воспользоваться следующим оператором.
Building house = new Building(); // создать объект типа Building
После выполнения этого оператора объект house
станет экземпляром класса Building
, т.е. обретет "физическую" реальность. Не обращайте пока что внимание на отдельные составляющие данного оператора.