Что такое Microsoft.NET?

медсправка на работу

Управляемый C++ в .NET Framework


Управляемый C++ в NET Framework
Управляемый C++ в .NET Framework Язык C++ — мощный инструмент разработки программ, оказавший огромное влияние на развитие вычислительной науки. Управляемые (managed) расширения от Microsoft доб...
Основные сведения об интерфейсах
Основные сведения об интерфейсах Объектно-ориентированное программирование — мощная методология, помогающая в проектировании и реализации больших программных систем. Использование классов позволяе...
Интерфейсы в управляемом C++
Интерфейсы в управляемом C++ В Visual C++ .NET для определения интерфейсов используется ключевое слово _interface (интерфейс). Само же определение подобно определению класса. Так же, как и классы,...
Наследование для интерфейсов
Наследование для интерфейсов Интерфейс может быть потомком другого интерфейса (однако управляемый интерфейс не может быть потомком неуправляемого, и наоборот). В отличие от классов, для которых...
Программирование с использованием интерфейсов
Программирование с использованием интерфейсов Использование интерфейсов облегчает программирование на управляемом C++. Интерфейсы реализуются через классы, и для получения указателя на интерфейс м...
Реализация интерфейсов
Реализация интерфейсов В C++ указание того, что класс реализует интерфейс, осуществляется с помощью двоеточия, используемого также для указания наследования класса. Управляемый класс может насле...
Использование интерфейсов
Использование интерфейсов Когда известно, что некоторый класс поддерживает определенный интерфейс, его методы можно вызывать с помощью указателя на экземпляр класса. Если же неизвестно, реализов...
Динамическое использование интерфейсов
Динамическое использование интерфейсов Полезной особенностью интерфейсов является возможность их использования в динамических сценариях, что позволяет по ходу выполнения программы проверять, под...
Проверка поддержки интерфейса перед приведением типов
Проверка поддержки интерфейса перед приведением типов Проверку поддержки интерфейса можно производить, выполняя динамическое приведение типа указателя и обрабатывая исключение, которое может при...
Оператор dynamic_cast
Оператор dynamic_cast Результатом выполнения оператора dynamic_cast является непосредственно указатель на интерфейс. В случае, если интерфейс не поддерживается, значение указателя устанавливаетс...
Программа Бюро путешествий Acme (Acme Travel Agency)
Программа Бюро путешествий Acme (Acme Travel Agency) Попытаемся применить полученные знания об интерфейсах для небольшой переделки программы Бюро путешествий Acme (Acme Travel Agency). Одним из на...
Интерфейсы в управляемом C++ и NET
Интерфейсы в управляемом C++ и .NET .NET и модель компонентных объектов Microsoft (COM) имеют много сходного. В обеих этих технологиях фундаментальную роль играет концепция интерфейсов. Их удобн...
Контракт
Контракт Ранее мы уже рассмотрели интерфейс ICustomer класса Customers (Клиенты). Теперь обратим внимание на класс HotelBroker. Его методы естественным образом разделяются на три группы. 1. Инфор...
Реализация
Реализация Далее реализуем систему управления гостиницами, используя коллекции вместо массивов. При этом мы будем возвращать программе-клиенту запрошенную ею информацию в методе TestHotel: -.Main...
Структуры
Структуры Прежде всего следует разобраться со структурой данных, передаваемых клиенту по его запросу. Мы используем класс ArrayList (Список массивов). А что же будет храниться в указанном списке м...
Явное определение интерфейсов
Явное определение интерфейсов При использовании интерфейсов может возникать неопределенность в случае, если в двух реализованных классом интерфейсах есть методы с одинаковыми именами и сигнатурами...
Родовые интерфейсы в NET
Родовые интерфейсы в .NET Большая часть возможностей, предоставляемых .NET Framework, осуществлена в родовых интерфейсах, которые реализованы в разных вариантах классами самой среды или могут быть...
Интерфейсы коллекций
Интерфейсы коллекций Теперь, достаточно подробно обсудив концепцию интерфейсов, мы можем обратить более пристальный взгляд на коллекции, в частности, на класс ArrayList (Список массивов), который...
Иерархия интерфейсов для списков
Рисунок 5.1. Иерархия интерфейсов для списков Четвертый интерфейс из реализованных в ArrayList (Список массивов), ICloneable, является независимым от первых трех и предназначен для осуществления д...
LEnumerableИ JEnumerator
lEnumerableИ JEnumerator Исходным для всех интерфейсов, предназначенных для работы с коллекциями, является интерфейс lEnumerable, имеющий один метод — GetEnumerator. _gc _interface lEnumerable //...
Интерфейс ICollection
Интерфейс ICollection Интерфейс ICollection является производным от lEnumerable и в нем добавляются свойство Count (Количество) и метод СоруТо. _gc _interface ICollection : public lEnumerable //...
Интерфейс IList
Интерфейс IList Интерфейс IList является производным от интерфейса iCollection и в нем введены методы для добавления элемента в список, удаления его из списка и т.д. _gc _interface IList : public...
Копирование объектов и интерфейс icioneable
Копирование объектов и интерфейс icioneable Иногда бывает необходимо сделать копию объекта. Если при этом копируются объекты, которые содержат другие объекты или указатели на них, то для корректно...
Интерфейс ICloneable
Интерфейс ICloneable Интерфейс ICloneable является исходным и имеет единственный метод— Clone (Клон). Данный метод может быть реализован для выполнения как поверхностного, так и детального копиров...
Поверхностная и детальная копии
Поверхностная и детальная копии Неуправляемые структуры и классы в C++ автоматически реализуют почленное копирование содержимого, которое будет актуальным до тех пор, пока не будет произведена п...
Пример программы
Пример программы Проиллюстрируем изложенный материал программой CopyDemo. Эта программа делает копию экземпляра класса Course (Курс). В классе Course (Курс) содержится название курса и список (кол...
Копирование указателей с помощью присваивания
Копирование указателей с помощью присваивания Первым способом копирования является просто присваивание рС2=рС1. В этом случае мы получаем два указателя на один и тот же объект, и изменения, произв...
Почленное копирование
Почленное копирование Теперь проиллюстрируем почленное копирование, выполненное с помощью метода MemberwiseClone класса Object (Объект). Так как этот метод защищен (имеет спецификатор доступа prot...
Использование ICloneable
Использование ICloneable Последний способ копирования использует тот факт, что класс Course (Курс) поддерживает интерфейс ICloneable и реализует метод Clone (Клон). Для копирования коллекции Roste...
Сравнение объектов
Сравнение объектов Итак, мы подробно рассмотрели копирование объектов. Теперь рассмотрим сравнение объектов. Для сравнения объектов в .NET Framework используется интерфейс ICompa-rable. В этом раз...
Сортировка массива
Сортировка массива В классе System::Array (Система::Массив) статический метод Sort (Сортировка) предназначен для сортировки массива. Программа ArrayName иллюстрирует применение этого метода к со...
Реализация IComparable
Реализация IComparable Для того чтобы можно было произвести сортировку, необходимо определить правила сравнения сортируемых объектов. Такие правила реализуются в методе CompareTo интерфейса ICompa...
Что такое каркасы приложений
Что такое каркасы приложений Наши примеры предполагают использование некоего каркаса приложений. Такой каркас — это больше, чем просто библиотека. При использовании библиотеки вы можете вызывать в...
Объект системы System Object
Объект системы: System::Object Как мы уже знаем, каждый управляемый (managed) тип (объявленный с префиксом _дс (сборщик мусора)) в управляемом C++ в конце концов является потомком корневого клас...
Делегаты
Делегаты Интерфейсы облегчают написание профамм в том смысле, что ее составляющие могут быть вызваны другими приложениями или системой. Такой стиль профаммирования известен давно как использован...
Объявление делегата
Объявление делегата В управляемом C++ делегат объявляется с помощью особого обозначения — ключевого слова_delegate (делегат) — и сигнатуры инкапсулированного метода. В соответствии с соглашением о...
Определение метода
Определение метода После инициализации делегата следует определить метод обратного вызова, сигнатура которого соответствует сигнатуре, описанной в объявлении делегата. Метод может быть как стати...
Создание экземпляра делегата
Создание экземпляра делегата Экземпляр делегата инициализируется с помощью оператора new (создать), так же, как и для любого другого класса. Ниже приведен код, демонстрирующий создание двух экзе...
Вызов делегата
Вызов делегата Синтаксис "вызова" делегата совпадает с синтаксисом вызова метода. Делегат не является сам по себе методом, но он инкапсулирует метод. Делегат "передает" вызов и...
Объединение экземпляров делегатов
Объединение экземпляров делегатов Несколько делегатов можно объединить в один так, чтобы результирующий делегат имел список вызываемых методов. При вызове подобного делегата будут вызваны по очере...
Полный пример
Полный пример Программа DelegateAccount иллюстрирует использование делегатов на примере банковского счета. В файле DelegateAccount. cpp объявляется делегат NotifyCallback. Методы, соответствующие...
Моделирование фондовой биржи
Моделирование фондовой биржи Для дальнейшего знакомства с использованием делегатов рассмотрим пример моделирования фондовой биржи, реализованный в папке stockMarket. Модель состоит из двух модулей...
Архитектура эмулятора фондовой биржи
Рисунок 5.2. Архитектура эмулятора фондовой биржи...
Запуск моделирования
Запуск моделирования Скомпонуйте и запустите программу StockMarket. Начните с принятой по умолчанию конфигурации: информация о текущем шаге не выводится, информация о сделках выводится, количество...
Определение делегата
Определение делегата В файле Engine . h объявлены два делегата. _delegate void TickCallback(int ticks); _delegate void TradeCallback( int ticks, String *pStock, int price, int volume); Как мы уже...
Передача информации о делегате эмулятору
Передача информации о делегате эмулятору Класс Admin (Управляющий модуль) передает информацию об используемом делегате классу Engine (Машинный модуль) при вызове конструктора класса Engine (Машинн...
Генерация случайных чисел
Генерация случайных чисел Основой эмулятора является метод Run (Запуск) класса Engine (Машинный модуль). Основная работа метода Run (Запуск) состоит в присвоении данных, полученных в результате ге...
Использование делегатов
Использование делегатов Указатели на экземпляры делегатов объявляются в классе Engine (Машинный модуль): TickCallback *pTickOp; TradeCallback *pTradeOp; Указатели на делегаты инициализируются в ко...
События
События Делегаты — основа более сложного протокола обратного вызова, называемого событиями. Согласно замыслу, сервер реализует входящие интерфейсы, которые могут быть вызваны клиентом. На диагра...
События в управляемом C++ и NET
События в управляемом C++ и .NET .NET Framework позволяет использовать простую реализацию идеи событий, основанную на применении делегатов. В управляемом C++ работа с событиями .NET основана на ис...
Общедоступные методы экземпляров класса Object (Объект)
Общедоступные методы экземпляров класса Object (Объект) Есть четыре общедоступных метода экземпляров класса Object (Объект), три из которых являются виртуальными и часто подменяются в управляемых...
Метод Equals (Равняется)
Метод Equals (Равняется) public: virtual bool Equals(Object*); // виртуальный логический (булев) Равняется (Объект *); Этот метод сравнивает объект, указатель на который передается методу в качес...
Метод ToString
Метод ToString public: virtual String* ToString(); // виртуальный Этот метод возвращает строку, содержащую удобочитаемое для человека описание объекта. Принятая по умолчанию версия, реализованн...
Метод GetHashCode
Метод GetHashCode public: virtual int GetHashCode(); // виртуальный Этот метод возвращает значение хеш-функции объекта, который может использоваться в алгоритмах хэширования и хэш-таблицах. Кла...
Метод CetType
Метод CetType public: Type* GetType(); Этот метод возвращает информацию о типе объекта. Такая информация может быть использована для получения связанных метаданных посредством отражения (reflec...
Описание сервера
Описание сервера Начнем рассмотрение с реализации сервера, находящейся в файле ChatServer. h. В архитектуре событий .NET используются делегаты с особой сигнатурой: _delegate void JoinHandler( Ob...
Сервер с входящим и исходящим интерфейсами
Рисунок 5.3. Сервер с входящим и исходящим интерфейсами _gc class ChatEventArg : public EventArgs // класс сборщика мусора ChatEventArg: EventArgs { public: String *pName; ChatEventArg(String...
Описание клиента
Описание клиента В этой части программы реализованы функции-обработчики событий. _gc class ChatClient // класс сборщика мусора ChatClient { public: static void OnJoinChat(Object *pSender, Chat...
Комната для дискуссий пример чатпрограммы
Комната для дискуссий: пример чат-программы Пример чат-программы EventOeTO иллюстрирует архитектуру как сервера, так и клиента В сервере реализованы следующие методы JomChat, QuitChat; ShowMemb...
Исходный код клиента
Исходный код клиента В клиенте реализованы обработчики событий. Прежде всего, клиент создает экземпляр серверного объекта, а затем ставит в соответствие каждому событию обработчик события Затем кл...
Исходный код сервера
Исходный код сервера Сервер содержит код, обеспечивающий хранение в коллекции имен пользователей, присоединившихся к чату. При уходе участника его имя удаляется из коллекции. Присоединение нового...
Резюме
Резюме В этой главе рассмотрены некоторые важные связи управляемого C++ и .NET Framework, причем начали мы с базового класса Object (Объект). Мы рассмотрели использование коллекций, в частности, т...
Защищенные методы экземпляров класса object (Объект)
Защищенные методы экземпляров класса object (Объект) Защищенными являются два метода класса Object (Объект). Эти методы могут использоваться только производными классами....
Метод MemberwiseClone
Метод MemberwiseClone protected: Object* MemberwiseClone(); // защищенный Данный метод создает поверхностную (shallow) копию объекта. Это метод не виртуальный, поэтому подменять его обычно не пр...
Метод Finalize (Завершить)
Метод Finalize (Завершить) -Object(); Этот метод позволяет освободить используемые объектом неуправляемые ресурсы и выпочнить другие операции, необходимые при сборке мусора (утилизации неиспользуе...
Родовые интерфейсы и обычное поведение
Родовые интерфейсы и обычное поведение Если вы знакомы с языком Smalltalk или ему подобными, набор возможностей, реализованных непосредственно в классе Object (Объект), может показаться вам весь...
Использование методов класса object
Использование методов класса object (Объект) в классе Customer (Клиент) Для иллюстрации описанных методов рассмотрим класс Customer (Клиент) до и после перегрузки методов Equals (Равняется), ToSt...
Стандартные методы класса object (Объект)
Стандартные методы класса object (Объект) Если не произвести подмены виртуальных методов объекта Object (Объект), наш класс будет наследовать стандартное поведение. Это поведение продемонстрирован...
Подмена методов класса object (Объект)
Подмена методов класса object (Объект) Версия проекта, содержащаяся в папке CustomerOb;ject\Step2, демонстрирует подмену виртуальных методов Ob] ect (Объект) //Customer.h _gc class Customer //...
Коллекции
Коллекции Библиотека классов NET Framework предлагает широкий выбор классов для работы с коллекциями объектов Все эти классы находятся в пространстве имен System: Collections (Система Коллекции)...
Пример класса ArrayList (Список массивов)
Пример класса ArrayList (Список массивов) Для начала приведем простой пример использования класса ArrayList (Список массивов) Как понятно из названия (Array List — Список массивов), ArrayList — эт...
Класс Customer (Клиент)
Класс Customer (Клиент) Все файлы с исходными кодами программы-примера находятся в папке Customer-Collection. В файле customer. h находится реализация классов Customer (Клиент) и Customers (Клие...
Интерфейсы
Интерфейсы Концепция интерфейсов — одна из основных в современном программировании. Большие системы неизбежно разделяются на части, и существенным становится вопрос о взаимодействии этих частей...








Начало