Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Отношение вложенности





Рассмотрим два класса Provider и Clent, связанных отношением вложенности. Оба класса применяются для демонстрации идей и потому устроены просто, не неся особой смысловой нагрузки. Пусть класс поставщик Provider уже построен. У класса три поля, одно из которых статическое, два конструктора, два метода - один статический и один динамический. Вот его текст:

/// <summary>

/// Класс поставщик,предоставляет клиентам

/// статический и зкземплярный методы,

/// закрываяполякласса

/// </summary>

class Provider

{

//fields

string fieldP1;

int fieldP2;

staticintfieldPS;

//Конструкторы класса

/// <summary>

/// Конструктор с аргументами

/// </summary>

/// <paramname="p1">аргумент,инициализирующий поле класса</param>

/// <paramname="p2">аргумент,инициализирующий поле класса</param>

public Provider(string p1, int p2)

{

fieldP1 = p1.ToUpper(); fieldP2 = p2*2;

fieldPS = 0;

}

public Provider()

{

fieldP1 = ""; fieldP2 = 0; fieldPS = 0;

}

//Динамический (Экземплярный) метод

public string MethodPD()

{

fieldPS++;

string res = "Объекткласса Provider" + "\n\r";

res += string.Format("Моиполя: поле1 = {0}, поле2 = {1}",

fieldP1, fieldP2);

returnres;

}

// Статический (Модульный) метод

public static string MethodPS()

{

string res = "Модулькласса Provider" + "\n\r";

res += string.Format("ЧисловызововметодаMethodPD = {0}",

fieldPS.ToString());

returnres;

}

 

Поля класса, как и положено, закрыты для клиентов. У класса, как и положено, есть конструктор без аргументов, инициализирующий поля класса соответствующими константами, и конструктор с аргументами, который преобразует переданные ему значения, прежде чем записать их в поля класса. Методы класса позволяют получить информацию, хранящуюся в полях. Динамический (экземплярный) метод MethodPD, которому доступны поля класса, хранимые экземплярами класса, возвращает строку с информацией о хранимых значениях в полях. Одновременно этот метод увеличивает значение, хранимое в статическом поле, которое можно рассматривать как счетчик общего числа вызовов динамического метода всеми объектами данного класса. Статический метод MethodPS, которому доступно только статическое поле, возвращает в качестве результата строку с информацией о числе вызовов динамического метода.

Построим теперь класс Client - клиента класса Provider. Класс будет устроен похожим образом. Существенное дополнение состоит в том, что одним из полей является объект provider класса Provider:

/// <summary>

/// Клиенткласса Provider

/// </summary>

class Client

{

//fields

Provider provider;

string fieldC1;

int fieldC2;

 

const string NEWLINE = "\n\r";

//Конструкторыкласса

public Client(string p1, int p2, string c1, int c2)

{

fieldC1 = c1.ToLower(); fieldC2 = c2-2;

provider = new Provider(p1,p2);

}

public Client()

{

fieldC1 = ""; fieldC2 = 0;

provider = new Provider();

}

/// <summary>

/// Метод, использующий поле класса provider

/// для работы с методами класса Provider

/// </summary>

/// <returns>композиция строк провайдера и клиента </returns>

public string MethodClient1()

{

string res = provider.MethodPD() + NEWLINE;

res += "Объекткласса Client" + NEWLINE;

res += string.Format("Моиполя: поле1 = {0}, поле2 = {1}",

fieldC1, fieldC2);

returnres;

}

}

Обратите внимание: конструкторы клиента (класса Client) создают объект поставщика (класса Provider), вызывая конструктор поставщика. Для создания объектов поставщика могут требоваться аргументы, поэтому они передаются конструктору клиента, как это сделано в нашем примере.

Создавая объект класса Client, конструкторы этого класса создают и объект класса Provider, связывая его ссылкой с полем provider. Все динамические методы клиентского класса могут использовать этот объект, вызывая доступные клиенту методы и поля класса поставщика. Метод класса Client - MethodClient1 начинает свою работу с вызова: provider.MethodPD(), вызывая сервис, поставляемый методом класса Provider.

Подводя первые итоги, можно заметить, что клиент класса может создавать объекты класса поставщика, а затем, используя созданные объекты, получать доступ к сервисам, предоставляемым классом поставщика своим клиентам. Конечно, поставщик имеет закрытую часть класса, не доступную его клиентам. Как правило, для клиентов закрываются поля класса. Клиенты класса получают доступ к методам класса поставщика - совокупность этих методов определяет интерфейс класса поставщика и те сервисы, которые поставщик предоставляет своим клиентам. Напомним, что интерфейс класса составляют методы с модификатором доступа public или internal для дружественных классов.







Дата добавления: 2015-09-06; просмотров: 408. Нарушение авторских прав; Мы поможем в написании вашей работы!




Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...


Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...


Вычисление основной дактилоскопической формулы Вычислением основной дактоформулы обычно занимается следователь. Для этого все десять пальцев разбиваются на пять пар...


Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

Примеры задач для самостоятельного решения. 1.Спрос и предложение на обеды в студенческой столовой описываются уравнениями: QD = 2400 – 100P; QS = 1000 + 250P   1.Спрос и предложение на обеды в студенческой столовой описываются уравнениями: QD = 2400 – 100P; QS = 1000 + 250P...

Дизартрии у детей Выделение клинических форм дизартрии у детей является в большой степени условным, так как у них крайне редко бывают локальные поражения мозга, с которыми связаны четко определенные синдромы двигательных нарушений...

Педагогическая структура процесса социализации Характеризуя социализацию как педагогический процессе, следует рассмотреть ее основные компоненты: цель, содержание, средства, функции субъекта и объекта...

Растягивание костей и хрящей. Данные способы применимы в случае закрытых зон роста. Врачи-хирурги выяснили...

ФАКТОРЫ, ВЛИЯЮЩИЕ НА ИЗНОС ДЕТАЛЕЙ, И МЕТОДЫ СНИЖЕНИИ СКОРОСТИ ИЗНАШИВАНИЯ Кроме названных причин разрушений и износов, знание которых можно использовать в системе технического обслуживания и ремонта машин для повышения их долговечности, немаловажное значение имеют знания о причинах разрушения деталей в результате старения...

Различие эмпиризма и рационализма Родоначальником эмпиризма стал английский философ Ф. Бэкон. Основной тезис эмпиризма гласит: в разуме нет ничего такого...

Studopedia.info - Студопедия - 2014-2026 год . (0.011 сек.) русская версия | украинская версия