Читаем Полное руководство. С# 4.0 полностью

В результате выполнения этой программы выводится значение 10. Дело в том, что метод ToString возвращает строковое представление объекта, для которого он вы зывается. В данном случае строковым представлением значения 10 как вызывающего объекта является само значение 10! Класс object как универсальный тип данных

Если object является базовым классом для всех остальных типов и упаковка зна чений простых типов происходит автоматически, то класс object можно вполне ис пользовать в качестве "универсального" типа данных. Для примера рассмотрим про грамму, в которой сначала создается массив типа object, элементам которого затем присваиваются значения различных типов данных. // Использовать класс object для создания массива "обобщенного" типа. using System; class GenericDemo { static void Main { object[] ga = new object[10]; // Сохранить целые значения. for(int i=0; i < 3; i++) ga[i] = i; // Сохранить значения типа double. for(int i=3; i < 6; i++) ga[i] = (double) i / 2; // Сохранить две строки, а также значения типа bool и char. ga[6] = "Привет"; ga[7] = true; ga[8] = 'X'; ga[9] = "Конец"; for (int i = 0; i < ga.Length; i++) Console.WriteLine("ga[" + i + "]: " + ga[i] + " "); } }

Выполнение этой программы приводит к следующему результату. да[0] : 0 да[1] : 1 да[2]: 2 да[3]: 1.5 да[4]: 2 да[5]: 2.5 да[6]: Привет да[7]: True да[8]: X да[9]: Конец

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

Несмотря на то что универсальный характер класса object может быть довольно эффективно использован в некоторых ситуациях, было бы ошибкой думать, что с по мощью этого класса стоит пытаться обойти строго соблюдаемый в C# контроль типов. Вообще говоря, целое значение следует хранить в переменной типа int, строку — в пе ременной ссылочного типа string и т.д.

А самое главное, что начиная с версии 2.0 для программирования на C# стали до ступными подлинно обобщенные типы данных — обобщения (более подробно они рассматриваются в главе 18). Внедрение обобщений позволило без труда определять классы и алгоритмы, автоматически обрабатывающие данные разных типов, соблюдая типовую безопасность. Благодаря обобщениям отпала необходимость пользоваться классом object как универсальным типом данных при создании нового кода. Уни версальный характер этого класса лучше теперь оставить для применения в особых случаях.

ГЛАВА 12. Интерфейсы, структуры и перечисления

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

Иногда в объектно-ориентированном программиро вании полезно определить, что именно должен делать класс, но не как он должен это делать. Примером тому мо жет служить упоминавшийся ранее абстрактный метод. В абстрактном методе определяются возвращаемый тип и сигнатура метода, но не предоставляется его реализация. А в производном классе должна быть обеспечена своя соб ственная реализация каждого абстрактного метода, опреде ленного в его базовом классе. Таким образом, абстрактный метод определяет интерфейс, но не реализацию метода. Ко нечно, абстрактные классы и методы приносят известную пользу, но положенный в их основу принцип может быть развит далее. В C# предусмотрено разделение интерфейса класса и его реализации с помощью ключевого слова interface.

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

Перейти на страницу:

Похожие книги

Основы программирования в Linux
Основы программирования в Linux

В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стан­дартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым. Для начинающих Linux-программистов

Нейл Мэтью , Ричард Стоунс , Татьяна Коротяева

ОС и Сети / Программирование / Книги по IT
C++
C++

С++ – это универсальный язык программирования, задуманный так, чтобы сделать программирование более приятным для серьезного программиста. За исключением второстепенных деталей С++ является надмножеством языка программирования C. Помимо возможностей, которые дает C, С++ предоставляет гибкие и эффективные средства определения новых типов. Используя определения новых типов, точно отвечающих концепциям приложения, программист может разделять разрабатываемую программу на легко поддающиеся контролю части. Такой метод построения программ часто называют абстракцией данных. Информация о типах содержится в некоторых объектах типов, определенных пользователем. Такие объекты просты и надежны в использовании в тех ситуациях, когда их тип нельзя установить на стадии компиляции. Программирование с применением таких объектов часто называют объектно-ориентированным. При правильном использовании этот метод дает более короткие, проще понимаемые и легче контролируемые программы. Ключевым понятием С++ является класс. Класс – это тип, определяемый пользователем. Классы обеспечивают сокрытие данных, гарантированную инициализацию данных, неявное преобразование типов для типов, определенных пользователем, динамическое задание типа, контролируемое пользователем управление памятью и механизмы перегрузки операций. С++ предоставляет гораздо лучшие, чем в C, средства выражения модульности программы и проверки типов. В языке есть также усовершенствования, не связанные непосредственно с классами, включающие в себя символические константы, inline-подстановку функций, параметры функции по умолчанию, перегруженные имена функций, операции управления свободной памятью и ссылочный тип. В С++ сохранены возможности языка C по работе с основными объектами аппаратного обеспечения (биты, байты, слова, адреса и т.п.). Это позволяет весьма эффективно реализовывать типы, определяемые пользователем. С++ и его стандартные библиотеки спроектированы так, чтобы обеспечивать переносимость. Имеющаяся на текущий момент реализация языка будет идти в большинстве систем, поддерживающих C. Из С++ программ можно использовать C библиотеки, и с С++ можно использовать большую часть инструментальных средств, поддерживающих программирование на C. Эта книга предназначена главным образом для того, чтобы помочь серьезным программистам изучить язык и применять его в нетривиальных проектах. В ней дано полное описание С++, много примеров и еще больше фрагментов программ.

Бьёрн Страуструп , Бьярн Страустрап , Мюррей Хилл

Программирование, программы, базы данных / Программирование / Книги по IT
Самоучитель UML
Самоучитель UML

Самоучитель UMLПервое издание.В книге рассматриваются основы UML – унифицированного языка моделирования для описания, визуализации и документирования объектно-ориентированных систем и бизнес-процессов в ходе разработки программных приложений. Подробно описываются базовые понятия UML, необходимые для построения объектно-ориентированной модели системы с использованием графической нотации. Изложение сопровождается примерами разработки отдельных диаграмм, которые необходимы для представления информационной модели системы. Цель книги – помочь программистам освоить новую методологию разработки корпоративных программных приложений для последующего применения полученных знаний с использованием соответствующих CASE-инструментов.

Александр Васильевич Леоненков , Александр Леоненков

Зарубежная компьютерная, околокомпьютерная литература / Программирование / Прочая компьютерная литература / Книги по IT