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