Часть II. Объектно-ориентированное программирование
// Метод
public int M_A()
{
return (a + b);
}
}
class B
{
public int c;
public A ab = new A(15,20);
public B(int cc)
{
c=cc;
}
}
class Program
{
public static void Main()
{
B ba = new B(5);
int sum=ba.c + ba.ab.M_A();
Console.WriteLine("Использование запечатанного " +
"класса\nкак объекта создаваемого");
Console.WriteLine("Поле с класса В = {0}", ba.c);
Console.WriteLine("Поля запечатанного класса А " +
"равны {0}, {1}",ba.ab.A_a, ba.ab.A_b);
Console.WriteLine("Результат суммирования поля " +
"из В и работы метода из А: {0}", sum);
// TODO: Implement Functionality Here
Console.Write("Press any key to continue... ");
Console.Read();
}
}
}
Итак, имеется запечатанный класс
А
с двумя полями, доступ к которым
осуществляется только через два соответствующих свойства —
А-а
и
Глава 8. Введение в классы
177
А_b
. В классе
А
есть метод
M_A()
, суммирующий значения закрытых по-
лей класса
А
. Мы строим класс
В
с одним полем
с
и объектом
ab
, полу-
чаемым из запечатанного класса
А
. Вывод данных на экран показывает,
что в классе
В
используется функциональность класса
А
(в частности,
метод
M_A()
), хотя наследования не было, т. к. оно невозможно из-за
запечатанности
А
. Заметим, что если объект одного класса вложен в
объект другого класса, то доступ к элементам вложенного объекта идет
через точку от имени объекта (это общее правило), а само имя объекта,
которое определяет членство объекта в другом классе, идет через точку
от имени объекта основного класса. В нашем случае, чтобы добраться
до свойства
А-а
из запечатанного класса, надо было записать
ba.ab.A_a
.
Рис. 8.9.
Результат использования запечатанного класса
в создаваемом классе
Вложенность классов
Рассмотренный выше пример является примером вложенности типов:
в C# допускается вложенность типов. (В данном случае классов как
типов. Про остальные подобные типы мы пока что ничего не знаем.)
При этом вложенный тип считается обычным членом охватывающего
или внешнего класса. Таким вложенным типом можно манипулировать,
как и любым другим членом класса. Синтаксис таков:
public class OuterClass
{
public class InnerClass1 {}
private class InnerClass2 {}
}
Если внутренний класс станет использоваться вне класса, в котором он
определен, его, естественно, надо будет указывать с именем включаю-
щего его класса (мы это видели в приведенном ранее примере на уровне
объектов). Например, можем записать фрагмент основной программы:
178
Do'stlaringiz bilan baham: |