Язык C#. Базовый курс, 2-е издание

Язык C#. Базовый курс, 2-е издание
Автор: Подбельский В.В.
Год: 2013
ISBN: n/a
Страниц: 426
Язык: Русский
Формат: PDF
Размер: 10 Мб

Download

Доступно для первоначального знакомства и с нужной строгостью рассматриваются классы и интерфейсы, структуры и перечисления, строки и массивы, индексаторы и свойства, делегаты и события, исключения и обобщений, а также основополагающие принципы объектно-ориентированного и обобщенного программирования. Примеры программ позволяют читателю не только глубоко изучить синтаксис и семантику
языка, но и получить практические навыки программирования на C#.
Второе издание дополнено главой об обобщениях – механизме “родового” иначе обобщенного программирования.
Книга рассчитана на программистов, переходящих с других языков на язык C#, на студентов и преподавателей, связанных с разработкой программ для платформы .NET.

+

C# не заставляет вас ограничиться только лишь встроенными типами данных, вы можете определять и свои собственные. У вас фактически нет иногоъыбора: для того чтобы вообще написать код на С#, необходимо определить тип, который будет содержать этот код. Любой код, написанный нами, и любая функциональность, что мы возьмем из библиотеки классов .NET Framework (или любой другой .NET-библиотеки), будет принадлежать некоторому типу. С# различает много разновидностей типов данных.

Классы

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

Если вы уже знакомы с объектно-ориентированными языками, все это покажется вам очень простым. Если нет, то, возможно, будет лучше, если сначала вы прочитаете какой-либо материал базового уровня, поскольку данная книга не предназначена для обучения программированию. Здесь лишь детали, специфичные для классов языка С#.

Копирование экземпляров

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

Структуры всегда копируемы, однако не существует никакого способа настроить этот процесс: операция присваивания просто копирует все поля, и если некоторые из них относятся к ссылочному типу, то копируется ссылка. Такое иногда называют «поверхностным» копированием, поскольку копируется только содержимое структуры, без создания копий любых объектов, на которые она может ссылаться.

В C# нет встроенного механизма создания копии экземпляра класса. Хотя в качестве API-интерфейса для копирования объектов .NET Framework предлагает интерфейс iCloneable, он поддерживается недостаточно широко. Его использование связано с проблемами, поскольку он не определяет, как обращаться с объектами, содержащими ссылки на другие объекты. Должна ли копия объекта также включать копии объектов, на которые ссылается этот объект (глубокое копирование) или просто копии ссылок (поверхностное копирование)? На практике типы, где требуется обеспечить возможность копирования, зачастую просто предлагают для выполнения этой задачи произвольный метод, не придерживаясь никакого конкретного шаблона.

Различие между нашим неизменяемым классом и типом int четко показывает, что встроенные числовые типы представляют собой нечто иное. Переменная типа int содержит не ссылку, а непосредственно значение этого типа — без какой-либо косвенности. В некоторых языках выбор между поведением ссылки и поведением значения определяется способом использования типа, однако в C# то или иное поведение является фиксированным свойством типа. Любой тип — либо ссылочный, либо значимый. Встроенные числовые типы — значимые, равно как…