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

Приложения будущего. Обзор платформы .NET. Волшебство метаданных.

Даже если бы платформа .NET смогла устранить все проблемы прошлого, этого все равно было бы недостаточно. Постоянный рост требований со стороны клиентов к функциональным возможностям приложений является одним из непреложных законов программирования.

Возможность беспрепятственной работы приложений в разных компьютерных сетях, обусловленная развитием Internet, стала императивом. Функциональные возможности компонентов должны быть доступны также и с других машин. При этом никто из программистов не хочет писать базовый каркас; все они жаждут писать приложения, предназначенные для непосредственного решения проблем своих клиентов.

Обзор платформы .NET

Платформа .NET содержит общеязыковую среду выполнения (Common Language RuntimeCLR). Общеязыковая среда выполнения CLR поддерживает управляемое выполнение, которое характеризуется рядом преимуществ. Совместно с общей системой типов (Common Type SystemCTS) общеязыковая среда выполнения CLR поддерживает возможность взаимодействия языков платформы .NET. Кроме того, платформа .NET предоставляет большую полнофункциональную библиотеку классов .NET Framework.

Волшебство метаданных

Чтобы решить все проблемы, связанные с разработкой Windows-приложений, платформа .NET должна обладать базовым набором служб, которые в любой момент доступны в любом языке программирования. Чтобы предоставить такие службы, платформа .NET должна иметь достаточно сведений о приложении.

Сериализация (преобразование в последовательную форму) объекта может послужить в качестве простого примера. Перед каждым программистом, рано или поздно, возникает проблема сохранения данных. Но зачем каждому программисту вновь изобретать колесо, решая вопрос о том, как следует сохранять вложенные объекты и сложные структуры данных? Зачем каждому программисту понимать, как эти объекты и данные хранятся в разных информационных хранилищах? Платформа .NET позволяет выполнить сериализацию объекта без вмешательства программиста. При желании разработчик может это сделать и самостоятельно.

Чтобы понять, как происходит сериализация объектов, мы рассмотрим относящийся к данной главе пример Serialize (Сериализация). Не станем акцентировать внимание на применяемых приемах программирования. Они будут рассмотрены позже. Сейчас же мы сосредоточимся на используемых в этом примере понятиях.

//Serialize.cs
>fusing <mscorlib.dll>
>fusing <System.Runtime.Serialization.Formatters.Soap.dll>
>// <Система. Время выполнения.
>// Преобразование в последовательную форму. Форматеры. Soap.dll>
>using namespace System;
>// использование пространства имен Система;
>using namespace System::Collections;
>// использование пространства имен Система:: Коллекции;
>using namespace System::10;
>// использование пространства имен Система:: Ввод-вывод;
>using namespace
>System::Runtime:Serialization::Formatters::Soap; // использование пространства имен
>// Система:: Время выполнения:: Преобразование в последовательную
// форму:: Форматеры:: Soap;
>[Serializable]
>// [Преобразование в последовательную форму]
>_gc class Customer
>// класс сборщика мусора Клиент
>{
>public:
>String *pname; // Строка long id; // идентификатор
>};
>_gc class Test
>// класс сборщика мусора Испытание
>{
>public:
>static void Main()
>{
>ArrayList *plist = new ArrayList;
>Customer *pcust = new Customer; // новый Клиент
pcust › pname = "Charles Darwin"; // Чарльз Дарвин
pcust › id = 10; // идентификатор
plist › Add(pcust); // Добавить
>pcust = new Customer; // новый Клиент
pcust › pname = "Isaac Newton"; // Исаак Ньютон
pcust › id =20; // идентификатор
plist › Add(pcust); // Добавить
>for (int i=0; i < plist › get_Count(); i++)
>{
>Customer *pcust = // Клиент
>dynamic_cast<Customer _gc *> // <Клиент _ сборщик
>//мусора *> (plist › get_Item(i)); Console::WriteLine("{0}: {!}",
>pcust › pname, _box(pcust › id)); // идентификатор } ~
>Console::WriteLine("Saving Customer List"); // ("Сохранение списка клиентов");
FileStream *ps = new FileStream(>"cust.txt", FileMode::Create); // Создать
SoapFormatter *pf = new SoapFormatter; pf › Serialize(ps, plist);
>// Преобразование в последовательную форму; ps › Close ();
>Console::WriteLine("Restoring to New List");
>// "Восстановить в новом списке");
>ps = new FileStream("cust.txt", FileMode::Open); // Открыть
>pf = new SoapFormatter();
>ArrayList *plist2 =
>dynamic_cast<ArrayList *>
>(pf › Deserialize(ps)); ps › Close();
>for (int i=0; i < plist › get_Count(); i++) {
>Customer *pcust = // Клиент
>dynamic_cast<Customer _gc *> // <Клиент _ сборщик мусора *>
>(plist › get_Item(i)); Console::WriteLine("{0}: {!}",
>pcust › pname, _box(pcust › id)); // идентификатор } } };
>void main(void) {
>Test::Main(); }
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.