Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Экзамен в гаи redacted.doc
Скачиваний:
5
Добавлен:
27.09.2019
Размер:
676.35 Кб
Скачать

2. Механизмы инкапсуляции в c#. Вложенные типы.

Любой класс базируется на трех основополагающих принципах: инкапсуляции, наследование и полиморфизме. Инкапсуляцией называется способность объектов «прятать» детали своей внутренней организации от пользователей. Например, в классе System.Console есть методы ReadLine() и WriteLine(), предназначенные соответственно для ввода и вывода строк. Данные методы были использованы при выполнении предыдущих занятий:

class Hello

{

static void Main(string[] args)

{

System.Console.WriteLine("Привет, C# !");

System.Console.ReadLine();

}

}

Таким образом, совершенно не зная программной реализации методов, но зная, для чего они предназначены, можно легко пользоваться ими. За счет инкапсуляции программирование становится проще: не нужно думать об огромном количестве строк кода, которые скрыто от нас выполняют нужную работу.

Другое преимущество инкапсуляции — возможность скрыть внутренние данные (поля) объекта. Как правило, при описании класса поля помечаются зарезервированным словом private. В результате доступ к ним становится возможен только с помощью открытых методов класса.

Создав объекты того или иного класса, программа может вызывать методы и обращаться напрямую к полям объекта (если это разрешено при объявлении класса). Работая с объектами, созданными на базе классов, нет необходимости вникать во внутренние детали устройства класса— достаточно знать, как и какие методы можно вызывать, какие передавать им параметры и какие значения эти методы возвращают.

Механизм сокрытия, или инкапсуляции, данных и методов класса облегчает создание программ, особенно сложных, так как позволяет программисту не вникать во все детали реализации всех программных компонентов.

Вложенные определения типов. Типы вроде классов можно определять не только в пространствах имен, но и внутри других классов. Такой подход открывает возможность использовать для определения целый ряд модификаторов доступности, а не только public и internal, а также позволяет применять ключевое слово new для сокрытия определения типа, унаследованного от базового класса. Например, в следующем коде помимо класса MyClass также еще определяется и вложенный класс по имени myNestedClass:

public class MyClass

{

public class myNestedClass

{

public int nestedClassField;

}

}

Для создания экземпляра myNestedClass за пределами myClass придется обязательно квалифицировать его имя, как показано ниже:

MyClass.myNestedClass myObj = new MyClass.myNestedClass();

Однако выполнение подобной операции может оказаться и совершенно невозможным, в случае объявления вложенного класса с уровнем доступности private или другим уровнем, являющимся несовместимым с кодом на этапе выполнения такой операции создания экземпляра. Возможность создавать вложенные определения типов существует главным образом для того, чтобы позволять определять классы, являющиеся приватными по отношению к содержащему их классу, чтобы больше никакой другой код в пространстве имен не мог получать к ним доступ.