Architecture Net или что такое Microsoft.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;
}
};
}

Приведенная программа показывает, как просто можно определить и реализовать компонент .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