Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Языки программирования -> Ватсон К. -> "С#" -> 99

С# - Ватсон К.

Ватсон К. С# — Лори, 2005 . — 879 c.
ISBN 1-861004-98-2
Скачать (прямая ссылка): vatsonc2005.pdf
Предыдущая << 1 .. 93 94 95 96 97 98 < 99 > 100 101 102 103 104 105 .. 404 >> Следующая


Весь механизм использования указателен скрыт от нас в управляемом коде, что позволяет этому коду быть существенно проще. На самом деле в C# существует - возможность получить доступ к операциям более низкого уровня, таким как манипуляции над указателями, воспользовавшись “небезопасным" кодом, однако эту сложную тему мы здесь рассматривать не будем,

Сравнение неглубокого и глубокого копирования

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

В .NET Framework псе это учитывается. Почленное копирование простых объектов достигается за счет использования метода MemberwieeCloneO, который наследуется от System,object. Данный метод является защищенным, однако не
202

Глава 9

составляет никакого труда определить общий метод на объекте, который его использует. Копирование, которое обеспечивается этим методом, известно под названием неглубокого копирования — в том смысле, что при его осуществлении не принимаются во внимание те члены, которые представляют собой ссылочные типы. Это означает, что ссылочные члены во вновь создаваемом объекте будут ссылаться на те же самые объекты, на которые ссылаются соответствующие члены в исходном объекте; во многих случаях это не совсем идеальный вариант. Еслн нам требуется создать новые экземпляры рассматриваемых полей и скопировать туда значения вместо ссылок, то мы должны выполнить так называемое глубокое копирование.

Существует интерфейс, который мы можем реализовать и который позволяет выполнить эту процедуру стандартным образом: icioneable. Еслн мы собираемся его применить, нам необходимо реализовать единственный метод, содержащийся в нем,— clone(). Этот метод возвращает значение типа System.object. Мы можем использовать совершенно произвольные способы обработки для получения этого объекта, реализуя тело этого метода так, как нам требуется. Другими словами, мы можем реализовывать процедуру глубокого копирования в зависимости от нашего желания (например, мы прн необходимости можем реализовать и процедуру неглубокого копирования).

Более детально этот вопрос будет рассматриваться в главе 11.

Итоги

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

В нескольких разделах вы встретились с классом System.object — корневым базовым классом всех определяемых нами классов. Он предоставляет несколько методов, которые можно использовать, причем некоторые из них являются виртуальными, что позволяет переопределять их реализацию. Этот класс позволяет также рассматривать экземпляр произвольного объекта как экземпляр данного типа, что дает возможность использовать полиморфизм для любых объектов.

Также были рассмотрены некоторые из имеющихся в VS инструментов, предназначенных для разработок с использованием ООП, среди которых окно Class View, окно Object Browser и простой способ добавления новых классов в проект, В качестве расширения такой “мультифайловой” концепции вы познакомились со способами создания модулей, которые не могут быть выполнены, но в которых содержатся определения классов, используемые в других проектах.

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

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

203

В следующей главе мы рассмотрим определение членов класса, таких как свойства и методы, что позволит нам поднять ООП в C# на уровень, необходимый для создания реальных приложений.

Упражнения

1. Что неправильно в следующем коде?

public sealed class HyClasa {

// члены класса '

)

public class BvDerivedClass : MyClass С

П члены класса -

2. Как можно описать класс, который нельзя создать?

3. Почему классы, которые нельзя создать, все равно оказываются полезными? Каким образом можно их использовать?
Предыдущая << 1 .. 93 94 95 96 97 98 < 99 > 100 101 102 103 104 105 .. 404 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.