Теперь представим первую версию программы управления системой бронирования Гостиничных номеров, которую мы будем использовать и расширять в следующих главах. Обратите внимание, что класс Hotel (Гостиница) хранится не в сборке ЕХЕ, а в динамически подключаемой библиотеке (DLL).
Рис. 3.1. Размещение в памяти прямоугольного массива
Рис. 3.2. Размещение в памяти массива массивов
Вы можете открыть готовое решение,
находящееся в папке HotelRes\Hotel, или создать
проект и ввести исходный код сами. Для того
чтобы это сделать, необходимо создать
проект библиотеки классов на управляемом C++
(Managed C++ Class Library project), называющийся Hotel (Гостиница),
добавить исходный код, а затем
скомпилировать проект. Заметьте, что
Создание библиотеки классов на управляемом C++ (Managed C++ Class Library project)
Создайте проект библиотеки классов на
управляемом C++ под названием Hotel (Гостиница):
1. Откройте Visual Studio.NET.
2. Выберите пункт меню File^New^Project (ФайлОСоздаты^Проект)
для того чтобы вызвать диалог New Project (Создание
проекта).
3. Выберите в списке Project Туре (Тип проекта)
Visual C++ Projects (Проекты на Visual C++).
4. Выберите в списке Template (Шаблон) Managed C++ Class
Library Project (Проект библиотеки классов на
управляемом C++),
5. Введите Hotel (Гостиница) в поле Name (Название).
6. Задайте папку, в которой будет сохранен
проект.
7. Щелкните на кнопке ОК. для того чтобы
закрыть диалог New Project (Создание проекта) и
создать проект.
Добавьте исходный код:
8. Дважды щелкните на файле Hotel.cpp в окне
Solution Explorer (Поиск решения).
9. Введите исходный код примера Hotel (Гостиница).
Скомпилируйте проект:
10. Выберите пункт меню Build^Build (СборкаОСобрать).
Хотя определение класса уже присутствует
в заголовочном файле и используется в
качестве типа данных в срр-файлах, мы, ради
простоты и наглядности, поместили данное
ниже определение класса Hotel (Гостиница)
непосредственно в исходный файл Hotel . срр.
Это привело также к тому, что указанный файл
стал больше похож на исходный файл С#, в
котором директива I include отсутствует. Visual
Studio создала, конечно, файл Hotel. h, но это не
имеет значения, т.к. соответствующая
директива #include была удалена из файла Hotel.
срр.
//Hotel.cpp
finclude "stdafx.h" // имеет #using <mscorlib.dll>
using namespace System;
// использовать пространство имен Система;
public _gc class Hotel
// класс сборщика мусора Гостиница
{
private: // частный
String *pcity; // Строка
String *pname; // Строка
int number;
Decimal rate; // Десятичное
public:
Hotel(String *pcity, String *pname, // Гостиница
int number, double rate)
{
this->pcity = pcity;
this->pname = pname;
this->number = number;
this->rate = rate;
}
Hotel() // Гостиница
{
this->pcity = 0;
this->pname = 0;
this->number = 50; // значение по умолчанию 50
this->rate = 0;
}
String *GetCity() // Строка
{
return pcity;
}
String *GetName() // Строка
{
return pname;
}
int GetNumber()
{
return number;
}
void SetNumber(int val)
{
number = val;
}
Decimal GetRate() // Десятичное число
{
x return rate;
}
void SetRate(Decimal val) // Десятичное число
{
rate = val; } void RaisePrice(Decimal amount) // Десятичное количество
{
rate = rate+1;
}
};
Приведенный код компилируется затем в сборку NET, называющуюся Hotel dll Это можно сделать в Visual Studio NET, а можно — с помощью командной строки Если вы используете командную строку, то должны определить соответствующее окружение Простейший способ сделать это — открыть командное окно, выбрав пункты меню Start (Пуск) => Programs (Программы) => Microsoft Visual Studio NET 7 => Visual Studio NET Tools => Visual Studio NET Command Prompt В командной строке, приведенной ниже, компилируется исходный файл Hotel cpp:
cl /CLR Hotel.cpp /LD
Параметр /LD указывает, что компоновщик
должен создать динамически подключаемую
библиотеку (DLL), а не ЕХЕ-файл Класс Hotel (Гостиница)
содержит частные (private) данные, два
конструктора для инициализации данных и
несколько общедоступных (public) методов
Для того чтобы продемонстрировать
возможность использования в NET разных
языков, следующая программа, которая
тестирует созданный ранее компонент Hotel (Гостиница),
реализована на С# Можно либо самостоятельно
ее реализовать с использованием Visual Studio NET,
либо просто открыть готовое решение,
находящееся в папке HotelRes\TestHotel Для создания
программы необходимо создать проект
консольного приложения на С# (С# Console Application)
TestHotel, добавить исходный код, затем ссылку
на сборку Hotel (Гостиница), после чего
скомпилировать и запустить программу
Создание консольного приложения на С# (С# Console Application):
Создайте проект консольного приложения С#,
называющийся TestHotel
1. Откройте Visual Studio NET
2. Выберите пункт меню Fue => New => Project (Файл => Создать =>
Проект) для того чтобы вызвать диалог New Project (Создание проекта).
3 Выберите в списке Project Type (Тип проекта)
Visual C# Projects (Проекты на Visual C#).
4 Выберите в списке Template (Шаблон) Console
Application (Консольное приложение)
5 Введите 'TestHotel" в поле Name (Название)
6. Задайте папку, в которой будет сохранен
проект
7. Щелкните на кнопке ОК для того чтобы
закрыть диалог New Project (Создание проекта) и
создать проект
Добавьте исходный код:
8. Щелкните правой кнопкой на файле Class.cs в окне Solution Explorer (Поиск
решения) и выберите в меню пункт Rename (Переименовать)
9. Введите новое имя исходного файла — TestHotel.cs
10. Дважды щелкните на файле TestHotel cs в окне
Solution Explorer (Поиск решения) для того чтобы
открыть файл для редактирования.
11. Добавьте в файл TestHotel cs соответствующий
исходный код
Добавьте ссылку на сборку Hotel (Гостиница):
12. Выберите пуню меню Project => Add Reference (Проект => Добавить ссылку).
13. Щелкните на кнопке Browse (Обзор)
14. Найдите папку, в которой хранится
сборка Hotel (Гостиница).
15. Дважды щелкните на сборке Hotel dll.
16. Щелкните на кнопке ОК.
Скомпилируйте и запустите проект:
17. Выберите пункт меню Build => Build (Сборка => Собрать)
18. Нажмите сочетание клавиш Ctrl-F5 для запуска программы без отладчика
//TestHotel.cs
using System;
JI использование Системы;
public class TestHotel
// общедоступный класс TestHotel
public static void Main()
{
Hotel generic = new Hotel (); // универсальная новая
// Гостиница
ShowHotel (generic) ; // универсальная
Hotel ritz = new Hotel("Atlanta", "Ritz",
100, 95);
// Роскошная гостиница = новая Гостиница
// ("Атланта", "Роскошь", 100, 95),
ShowHotel(ritz);
ritz.RaisePrice(50m);
ritz.SetNumber(125);
ShowHotel(ritz);
; }
private static void ShowHotel (Hotel hotel)
// частный статический
ShowHotel (Гостиница гостиница)
{
Console.WriteLine(
"{0} {1}: number = {2}, rate = {3:C}",
hotel.GetCity(), hotel.GetName(), // гостиница
hotel.GetNumber(), hotel.GetRate()); // гостиница
}
}
Обратите внимание, что Visual Studio автоматически копирует Hotel.dll в ту же папку, в которую помещает файл TestHotel. exe Так происходит потому, что в проект С# была добавлена ссылка на данную сборку Это удобно, ведь если запустить программу-клиент, а общеязыковая среда выполнения CLR не найдет соответствующей сборки, возникнет исключение времени выполнения Приведем строки, выведенные на экран программой, созданной на С# с компонентом на C++:
number = 50, rate = $0.00
Atlanta Ritz: number = 100, rate = $95.00
Atlanta Ritz: number = 125, rate = $96.00