Иллюстрированный самоучитель по Architecture .NET

Сравнение программирования на 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;
}
};
}
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.