Вложение классов.
Программирование.
Базовый курс с#
В классе Circle для инициализации поля center используется конструктор умолчания класса Point. Префикс «Circle.» при этом не требуется применять, хотя его использование не приведет к ошибке. То же самое относится и к обозначению типа свойства Centre. Нет явного определения конструкторов и во внешнем классе. Поэтому в методе Main () для создания объекта, ассоциированного со ссылкой rim… Читать ещё >
Вложение классов. Программирование. Базовый курс с# (реферат, курсовая, диплом, контрольная)
В объявление класса в качестве его члена может войти объявление типа. Таким типом может быть класс. Этот внутренний класс называют вложенным классом, а включающий его класс — внешним. Особенностью вложенного класса является то, что ему доступны все члены внешнего класса, даже если эти члены закрытые (private). Обычно вложенный класс вводится только для выполнения действий внутри внешнего класса и «не виден» вне включающего его класса. Однако вложенный класс может быть объявлен с модификатором public и тогда он становится доступен везде, где виден внешний класс. Если открытый класс Nested вложен в класс Outside, то для внешнего обращения к вложенному классу следует использовать квалифицированное имя Outside.Nested.
Продемонстрируем синтаксис вложения классов на примере класса окружности (Circle), центр которой представляет объект вложенного класса Point. Чтобы возможности внешнего класса Circle были близки к возможностям уже рассмотренных классов, реализующих композицию и агрегацию, сделаем вложенный класс Point открытым. В следующей программе объявлен указанный класс Circle с вложенным классом Point.
// 1303.cs — вложение классов using System; class Circle { // Закрытые поля:
double rad; // радиус окружности Point centre = new Point (); // центр окружности 11 свойство для радиуса окружности: public double Rad {.
get { return rad; } set { rad = value; }.
}
// свойство для значения длины окружности:
public double Len { get { return 2 * rad * Math. PI; } }.
// свойство для центра окружности: public Point Centre {.
get { return centre; } set { centre = value; }.
>
public void display ().
{
Console.WriteLine («Centre: X={0}, Y={1}; «+.
" Radius={2}J Length={3,6:f2}", centre. X, centre. Y, this. rad, Len);
}
public class Point.
{
double x, y;
public double X { get { return x; } set { x = value; } } public double Y { get { return y; } set { у = value; } } } // end of Point } // end of Circle
class Program.
{
static void MainQ.
{
Circle rim = new Circle (); rim.Centre.X = 100; rim.Centre.Y = 200; rim. Rad = 30.0; rim. displayO;
}
}.
Рис. 13.3. Диаграмма вложения классов
Результат выполнения программы:
Centre: Х=100, Y=200; Radius=30, Length=188,50.
В классе Circle для инициализации поля center используется конструктор умолчания класса Point. Префикс «Circle.» при этом не требуется применять, хотя его использование не приведет к ошибке. То же самое относится и к обозначению типа свойства Centre. Нет явного определения конструкторов и во внешнем классе. Поэтому в методе Main () для создания объекта, ассоциированного со ссылкой rim, используется конструктор умолчания Circle (). Для обращения к свойствам, определяющим центр окружности, потребовалось, как и при композиции, использовать имена с двойной квалификацией: rim.Centre.X и rim.Centre.Y.
В отличие от композиции и агрегации, при вложении классов внутренний класс (не только объект, но и сам внутренний класс) не существует независимо от внешнего. На диаграмме классов вложенный класс изображается именно внутри внешнего (см. рис. 13.3).