Що таке Mіcrosoft. Net?

Вид материалаДокументы
Подобный материал:
1   2   3
Length; i++)

{

intArray[i]= i;

Console::Write(intArray[i]); // Запис

Console::Write("\t"); // Запис } Console::WriteLine();

// керований двовимірний масив Рядків

// (використовуючий керований тип)


Console::WriteLine("managed 2D array Strings");

// ("керований двовимірний масив Рядків ");

String *str2DArray[,] = new String *[2,3]; // новий Рядок

for(int row=0; rowGetLength(0); row++)

//по рядках

{

for(int col=0; colGetLength(l); col++)

//по стовпцях

{

str2DArray[row,col]= (row*10 + col).ToString();

// str2DArray [рядок, стовпець] = (row*10 + стовпець)


// .ToString ();

Console::Write(str2DArray[row,col]);

// Запис:: (str2DArray [рядок, стовпець]);

Console::Write("\t"); // Запис }

Console::WriteLine(); }

// некерований двовимірний масив int (для порівняння)

Console::WriteLine("unmanaged 2D array int");

// ("некерований двовимірний масив int");

int int2DArray[2][3];

for(int row=0; row<2; row++)//по рядках

{

for (int col=0; col<3; col++) // по стовпцях {

int2DArray[row][col]= row*10 + col;

// int2DArray [рядок] [стовпець] = row*10 + стовпець; Console::Write(int2DArray[row][col]); // Запис:: (int2DArray [рядок]

[стовпець]); Console::Write("\t"); // Запис }

Console::WriteLine(); } )

Результат роботи програми приведений нижче. Керований прямокутний двовимірний масив містить елементи типу String*, а некерований

— елементи типу int. Проте керований масив може також містити і елементи некерованих типів тоді як некерований масив — лише елементи некерованих типів.

managed ID array int 01234 managed 2D array Strings 012 10 11 12

unmanaged 2D array int

0 1 2

10 11 12

Переклад такий:

керований одновимірний масив int

01234

керований двовимірний масив Рядків

0 1 2

10 11 12

некерований двовимірний масив int

0 1 2

10 11 12

Наведемо ще один приклад, в якому порівнюється використовування масиву масивів (синтаксис [ ] [ ]) і прямокутного двовимірного

масиву (синтаксис [ ]). Цього разу, ради більш коректного порівняння, обидва масиви містять елементи типу int.

//Array2.срр

#using

using namespace System;

// використовувати простір імен Система;

void main(void){

Console::WriteLine("Rectangular array using [,]");

// ("Використовування прямокутного масиву [,] ");

int rect2DArray [,] = new int _gc [3,41; // складальник сміття

-

// керований

for(int row=0; row< rect2DArray ->GetLength(0); row++)// по рядках {

for(int col=0; col< rect2DArray->GetLength(1); col++)

// по стовпцях

{

rect2DArray [row,col] = row*10 + col; // rect2DArray [рядок, стовпець] = row*10 + стовпець; Console : -.Write (rect2DArray

[row, col] ) ; // Запис:: (rect2DArray [рядок, стовпець]); Console::Write("\t"); // Запис }

Console::WriteLine(); }

Console::WriteLine("Array arrays using [][]"); // ("використовування масиву масивів [] [] "); int arrayOfArray[3][4]; //

некерований for(int row=0; row<3 ; row++)// по рядках {

for(int col=0; col<4; col++)// по стовпцях {

arrayOfArray[row][col]= row*10 + col;

Доданий редактором російського перекладу. — Прим. ред.


// arrayOfArray [рядок] [стовпець] = row*10 + стовпець; Console::Write(arrayOfArray[row][col]); // Запис:: (arrayOfArray

[рядок] [стовпець]); Console::Write("\t"); // Запис

}

Console::WriteLine(); } >

Програма надрукує:

Rectangular array using [,]

0 1 2 3

10 11 12 13

20 21 22 23

Array arrays using [][]

0 1 2 3


Програма Hotel (Готель)


Тепер представимо першу версію програми управління системою бронювання Готельних номерів, яку ми використовуватимемо і

розширюватимемо в наступних розділах. Зверніть увагу, що клас Hotel (Готель) зберігається не в збірці ЕХЕ, а в бібліотеці,

що динамічно підключається (DLL).




Мал. 3.1. Розміщення в пам'яті прямокутного масиву





Мал. 3.2. Розміщення в пам'яті масиву масивів


Ви можете відкрити готове рішення, що знаходиться в теці HotelRes\Hotel, або створити проект і ввести початковий код самі.

Для того, щоб це зробити, необхідно створити проект бібліотеки класів на керованому C++ (Managed C++ Class Library project),

називається Hotel (Готель), додати початковий код, а потім скомпілювати проект. Помітьте, що оскільки вихідний файл —динамически

бібліотека (DLL), що підключається, його не вдасться протестувати до створення здійснимого файлу (ЕХЕ) програми-клієнта.


Створення бібліотеки класів на керованому C++ (Managed C++ Class Library project)


Створіть проект бібліотеки класів на керованому C++ під назвою Hotel (Готель):

1. Відкрийте Visual Studio.NET.


2. Виберіть пункт меню FileNewProject (ФайлОСоздатыПроект) для того, щоб викликати діалог 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. Виберіть пункт меню BuildBuild (СборкаОСобрать).

Хоча визначення класу вже присутнє в заголовному файлі і використовується як тип даних в срр-файлах, ми, ради простоти і

наочності, помістили дане нижче визначення класу Hotel (Готель) безпосередньо в початковий файл Hotel . срр. Це привело також до тому, що вказаний файл став більше схожий на початковий файл С#, в якому директива I include відсутній.

Visual Studio створила, звичайно, файл Hotel. h, але це не має значення, оскільки відповідна директива #include була видалена з файлу Hotel. срр.


//Hotel.cpp

finclude "stdafx.h" // має #using

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


Программирование на C++ для платформи .NET

В цьому розділі глави ми вивчимо основні аспекти створення коду на керованому C++. Зокрема, будуть розглянуті всі ключові слова

розширення керованості C++, підтримувані Visual C++.NET. Помітимо, що це далеко не всі ключові слова Visual C++ 7.0, не визначені стандартом ANSI C++, — же ми концентруємо вашу увагу саме на розширенні керованості C++. Проте в розгляді

зачіпаються деякі аспекти, що не відносяться до керованого коду. Наприклад, використовування ключового слова _interface

(інтерфейс) не обмежується лише керованим кодом. І на закінчення ми стисло опишемо атрибути, технічно що не відносяться

до керованості.