Сравнение программирования на C++ с использованием модели компонентных объектов Microsoft (COM) и .NET
Для простого и эффективного определения набора методов без определенной реализации используется управляемый интерфейс. Идея применения интерфейсов в программировании является одной из наиболее важных концепций объектно-ориентированного программирования. Интерфейсы поддерживаются в языках программирования Java и C++. Подобно реализации в C++ интерфейса на основе модели компонентных объектов Microsoft (COM), интерфейс .NET, реализованный на управляемом C++, содержит только общедоступные чисто виртуальные методы.
Управляемый интерфейс, реализованный на управляемом C++, объявляется с одновременный указанием ключевых слов _gc (сборщик мусора) и _interface (интерфейс), как показано в приведенном ниже примере программы. Компилятор следит за наличием реализации в любом конкретном классе, реализующем такой интерфейс, что является важной гарантией с точки зрения клиентской программы. Это позволяет при написании клиентской программы использовать родовой интерфейс и не заниматься деталями вроде того, в каком конкретном классе реализован нужный интерфейс.
Следующий пример реализован как проект библиотеки классов на управляемом C++ под именем ManagedClassLibrary, который был создан с использованием последовательности меню NewoProject (Создать Проект) в Visual Studio .NET. Получившийся в результате компонент .NET – динамически подключаемая библиотека (DLL) – затем может быть вызван клиентами .NET, которые написаны на любом языке программирования, таком как VC++, С# или VB.NET. В данном проекте мы вводим пространство имен ManagedClassLibrary. Это не требуется в обязательном порядке в сборке .NET, но в больших проектах и в ситуациях, когда существует возможность использования ваших компонентов многими программистами, рекомендуется определять пространства имен для того, чтобы избежать коллизий имен.
//ManagedClassLibrary.h ttpragma once // pragma однажды using namespace System; // использование пространства имен Система; namespace ManagedClassLibrary // пространство имен { public _gc _interface ISomelnterface // сборщик мусора – интерфейс ISomelnterface { void SomeMethod(); int SomeOtherMethod(); }; public _gc class Somelnterfacelmpl // класс сборщика мусора Somelnterfacelmpl : public ISomelnterface { public: void SomeMethod() { Console::WriteLine("SomeMethod"); } int SomeOtherMethod() { Console::WriteLine("SomeOtherMethod"); return 0; } }; }