house.Floors + " этажа\n " +
house.Occupants + " жильца\n " +
house.Area +
" кв. футов общей площади, из них\n " +
areaPP + " приходится на одного человека");
}
}
Эта программа состоит из двух классов: Building
и BuildingDemo
. В классе BuildingDemo
сначала создается экземпляр house класса Building
с помощью метода Main(),
а затем в коде метода Main()
осуществляется доступ к переменным экземпляра house
для присваивания им значений и последующего использования этих значений. Следует особо подчеркнуть, что Building и BuildingDemo
— это два совершенно отдельных класса. Единственная взаимосвязь между ними состоит в том, что в одном из них создается экземпляр другого. Но, несмотря на то, что это раздельные классы, у кода из класса BuildingDemo
имеется доступ к членам класса Building
, поскольку они объявлены как открытые ( public
). Если бы при их объявлении не был указан спецификатор доступа public
, то доступ к ним ограничивался бы пределами Building
, а следовательно, их нельзя было бы использовать в классе BuildingDemo
.
Допустим, что исходный текст приведенной выше программы сохранен в файле UseBuilding.cs
. В результате ее компиляции создается файл UseBuilding.exe
. При этом оба класса, Building и BuildingDemo
, автоматически включаются в состав исполняемого файла. При выполнении данной программы выводится следующий результат.
Дом имеет:
2 этажа
4 жильца
2500 кв. футов общей площади, из них
625 приходится на одного человека
Но классам Building и BuildingDemo
совсем не обязательно находиться в одном и том же исходном файле. Каждый из них можно поместить в отдельный файл, например Building.cs
и BuildingDemo.cs
, а компилятору C# достаточно сообщить, что оба файла должны быть скомпилированы вместе. Так, если разделить рассматриваемую здесь программу на два таких файла, для ее компилирования можно воспользоваться следующей командной строкой.
csc Building.cs BuildingDemo.cs
Если вы пользуетесь интегрированной средой разработки Visual Studio, то вам нужно ввести оба упомянутых выше файла в свой проект и затем скомпоновать их.
Прежде чем двигаться дальше, рассмотрим следующий основополагающий принцип: у каждого объекта имеются свои копии переменных экземпляра, определенных в его классе. Следовательно, содержимое переменных в одном объекте может отличаться от их содержимого в другом объекте. Между обоими объектами не существует никакой связи, за исключением того факта, что они являются объектами одного и того же типа. Так, если имеются два объекта типа Building
, то у каждого из них своя копия переменных Floors, Area и Occupants
, а их содержимое в обоих объектах может отличаться. Этот факт демонстрируется в следующей программе.
// В этой программе создаются два объекта типа Building.
using System;
class Building {
public int Floors; // количество этажей
public int Area; // общая площадь здания
public int Occupants; // количество жильцов
}
// В этом классе объявляются два объекта типа Building,
class BuildingDemo {
static void Main() {
Building house = new Building();
Building office = new Building();
int areaPP; // площадь на одного человека
// Присвоить значения полям в объекте house,
house.Occupants = 4;
house.Area = 2500;
house.Floors = 2;
// Присвоить значения полям в объекте office,
office.Occupants = 25;
office.Area = 4200;
office.Floors = 3;
// Вычислить площадь на одного человека в жилом доме.
areaPP = house.Area / house.Occupants;
Console.WriteLine("Дом имеет:\n " +
house.Floors + " этажа\n " +
house.Occupants + " жильца\n " +
house.Area +
" кв. футов общей площади, из них\n " +
areaPP + " приходится на одного человека");
// Вычислить площадь на одного человека в учреждении.
areaPP = office.Area / office.Occupants;
Console.WriteLine("Учреждение имеет:\n " +
office.Floors + " этажа\n " +
office.Occupants + " работников\n " +
Читать дальше