Що таке Mіcrosoft. Net?
Вид материала | Документы |
- Лекция Visual Studio. Net, Framework. Net, 158.46kb.
- Що таке робоча програма наукового дослідження? Що таке принциповий план наукового дослідження?, 111.89kb.
- Установка и настройка программы. 6 Лицензия на число клиентов. 49 Регламентное тестирование, 734.62kb.
- «sql*net», 239.02kb.
- Курс «Обзор перспективных технологий Microsoft. Net» Губанов Ю. А., математико-механический, 177.56kb.
- Реферат на тему: "Нецінова конкуренція", 132.85kb.
- Автоматизированные комплексы обнаружения радиоизлучений акор нтц «Квант», 41.67kb.
- Спробуйте відповісти на таке запитання: що таке культура, 315.91kb.
- Что такое Microsoft. Net?, 396.3kb.
- Що таке поступ?, 3268kb.
{
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; row
//по рядках
{
for(int col=0; 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
(інтерфейс) не обмежується лише керованим кодом. І на закінчення ми стисло опишемо атрибути, технічно що не відносяться
до керованості.3>