Для простого и эффективного определения набора методов без определенной реализации
используется управляемый интерфейс. Идея применения интерфейсов в программировании
является одной из наиболее важных концепций объектно-ориентированного программирования.
Интерфейсы поддерживаются в языках программирования Java и C++. Подобно реализации
в C++ интерфейса на основе модели компонентных объектов Microsoft (COM), интерфейс
.NET, реализованный на управляемом C++, содержит только общедоступные чисто
виртуальные методы. Управляемый интерфейс, реализованный на управляемом C++,
объявляется с одновременный указанием ключевых слов _gc (сборщик мусора) и _interface
(интерфейс), как показано в приведенном ниже примере программы. Компилятор следит
за наличием реализации в любом конкретном классе, реализующем такой интерфейс,
что является важной гарантией с точки зрения клиентской программы. Это позволяет
//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;
}
};
}
Приведенная программа показывает, как просто можно определить и реализовать
компонент .NET. Сравним это со значительной сложностью определения и реализации
на C++ традиционного компонента на основе модели компонентных объектов Microsoft
(COM). Для компонента в .NET мы просто определяем интерфейс, а затем реализуем
этот интерфейс в производном классе. Таким образом реализуются все преимущества
и возможности, традиционно ассоциируемые с компонентно-ориентированным программированием,
притом без каких-либо усложнений и усилий, которые обычно приходится прилагать
при программировании с использованием модели компонентных объектов Microsoft
(COM). Например, одним из достоинств модели компонентных объектов Microsoft
(COM) является ее программная независимость. Обратим внимание, что программа
клиента, написанная на любом языке .NET, может использовать созданный ранее
компонент .NET без редактирования системного реестра и без реализации таких
вещей, как фабрика классов, глобально уникальных идентификаторов (globally unique
identifier, GUID) или lUnknown,.
Например, следующая программа на С# (заметьте, что мы временно переключились
на язык С#) способна вызвать созданный ранее компонент .NET. Все, что требуется
сделать — это создать на С# новый проект консольного приложения (назовем его
ManagedClassClient), добавить в него приведенную ниже программу и добавить ссылку
на проект, который ссылается на сборку ManagedClassLibrary.dll, созданную в
предыдущем примере. Мы добавляем ссылку на другую сборку посредством выбора
пункта меню Project => Add Reference (Проект => Добавить ссылку), затем
щелкаем на кнопке Browse (Обзор) и переходим к требуемой сборке. Если вы забыли
добавить ссылку на сборку, то при компиляции будет обнаружена ошибка. В сообщении
об ошибке будет сказано, что пространство имен ManagedClassLibrary не существует.
Посмотрев на приведенную ниже программу, вы увидите, что в ней на самом деле
определяется пространство имен ManagedClassLibrary.
//ManagedClassClient.cs
using System;
// использовать Систему;
using ManagedClassLibrary;
// использовать ManagedClassLibrary;
namespace ManagedClassClient
// пространство имен ManagedClassClient
{
public class Test
// общедоступный класс Испытание
{
public static int Main(string[] args)
// общедоступная статическая Главная (строка параметров)
{
ISomelnterfасе si =
new Somelnterfacelmpl();
si.SomeMethod();
si.SomeOtherMethod();
return 0;
}
}
}
Выдача клиентской программы, написанной на С#, приведена ниже:
SomeMethod
SomeOtherMethod