Творчо редагований переклад книги "C# для вундеркіндів" (C# для вундеркиндов. рос.) знайденої на сайті "Центр начинающего разработчика" за адресою: http://msdn.microsoft.com/ru-ru/library/bb330922(vs.80).aspx
C# вундеркіндам. Частина 1. Перше знайомство.
Visual Studio 2005
лютий 2007
Чи буде далі цікаво?
Мені здається, я знаю, про що ви зараз думаєте ... «Я хочу написати програму і хочу зробити це зараз! Програмування - це найцікавіше, і я не збираюся створювати свою першу програму, прочитавши половину книги. Навіть вже це речення стає занадто довгим. Я просто вже хочу почати! »
Для розробки програм на C # вам знадобляться:
Пакет Microsoft. NET Framework, який можна безкоштовно завантажити на сторінці http://msdn.microsoft.com/ru-ru/netframework/
Середовище розробки. NET Framework. Ми рекомендуємо версію Microsoft Visual C # Express Edition, яку можна безкоштовно завантажити на веб-сайті Microsoft за посиланням: http://www.microsoft.com/express/ru/vcsharp. Пакет установки Visual C # Express включає. NET Framework, так що вам не доведеться окремо встановлювати додаток з пункту 1 вище.
І нарешті, вам потрібно скопіювати файли прикладів з книги на диск свого комп'ютера. Розпакуйте файл example.zip в будь-яку папку. Запам'ятайте розміщення вибраної папки, так як пізніше вам потрібно відкривати з неї файли.
Додаткова інформація про Microsoft Visual C # Express Edition.
Програми на C # можна писати в простому текстовому редакторі (такому як Блокнот) і компілювати за допомогою так званого «компілятору C #», що входить до складу. NET Framework. Щоб дещо спростити завдання, а також забезпечити ваше подальше просування після прочитання книги, ми рекомендуємо використовувати середовище розробки Visual C # Express. Це спрощене середовище для розробки додатків для Windows і консольних додатків (програм командного рядка) мовою C #.
Важливо розуміти, що ця книга не навчить вас, як користуватися програмою Visual C # Express Edition, скоріше вона навчить вас мові C #.
У Visual C # Express також є безліч чудових функцій, таких як автоматичне написання коду C # під час перетягування кнопки або іншого елемента керування на сторінку. Це чудова можливість і нею можна користуватися, але мета цієї книги - навчити мові C #, починаючи з самих основ». Ми хочемо навчити вас писати код C # спочатку вручну, щоб ви дійсно зрозуміли, що відбувається.
Щоб отримати додаткові відомості про середовище розробки Visual C # Express, відвідайте веб-сайт http://www.microsoft.com/visualstudio/ru-ru/products/2010-editions/visual-csharp-express.
Написання нової програми в Visual C # Express
Щоб запустити Visual C # Express в меню «Пуск» вкажіть «Усі програми» і потім «Microsoft Visual C # 2010 Express Edition».
Для початку нового проекту в меню File («Файл») виберіть New project («Новий проект») і виберіть тип проекту. Ми почнемо з кількох консольних додатків, а пізніше перейдемо до додатків для Windows.
Наприклад, спробуйте створити новий консольний додаток і натисніть «ОК». У вікні, для програмування Program.cs видаліть весь автоматично вставлений код і наберіть текст простої програми, наведеною нижче. Ви можете скопіювати і вставити текст, якщо лінь сильніша за вас. Але хіба це розумно?!
using System;
class PleaseSayYo
{
static void Main ()
{
Console.WriteLine ("Yo!");
Console.ReadLine ();
}
}
Переконайтеся, що набраний вами текст у ТОЧНОСТІ відповідає представленому вище (форматування курсивом можна пропустити). Потім натисніть кнопку «Виконати» чи «Відтворити» (або натисніть клавішу F5). Якщо програма виконана успішно, через деякий час вона відкриється у окремому вікні.
Чесно кажучи, мені все ж хочеться зустріти програміста, який зміг би опиратися бажанню негайно зануритися в програмування з головою. Зрештою, якщо ви купили новий велосипед, ви спочатку присядете і прочитаєте інструкцію? Швидше за все, ні. Ви, скочивши на свого коня, понесетеся, розіб'єте обличчя і лише потім виявите, що гальма у цієї моделі зовсім не ті, що в інших велосипедів.
Отже, давайте домовимося. Почнемо занурення з найпершого розділу. Після установки програми можете виконати деякі приклади і навіть змінити їх, якщо у вас вистачить сміливості.
Перші програми будуть виглядати дивно і безглуздо, як їзда наосліп, і коли ви допустите невелику помилку, то не будете знати, як вирішити проблему, оскільки програма просто не буде працювати. У цей момент ви зрозумієте, що настав час зайнятися теорією, як це роблять професіонали. Не сумуйте і не здавайтеся, якщо щось не буде виходити. А коли прийде час, прочитайте решту книги, добре?
Дуже важлива частина
У програмуванні, як і у всіх інших професіях, найбільшого успіху досягають люди, що люблять свою роботу. Якщо ви отримуєте задоволення від програмування, то не зможете встояти від спокуси вивчення нових можливостей. Ваша тяга до знань буде підштовхувати вас вперед, і подальше навчання стане необтяжливою справою.
Отже, насамперед: вивчайте світ програмування C # з насолодою!
По завершенні програми її необхідно зупинити. Для цього можна натиснути кнопку «X» у верхньому правому куті вікна.
Якщо в коді програми буде виявлена будь-яка помилка, ви отримаєте попередження. Наприклад, зверніть увагу на те, що в мові програмування C # в кінці кожного речення чи висловлювання повинна стояти крапка з комою. Якщо видалити останню крапку з комою («;»), а потім виконати програму, то ви побачите таке повідомлення про помилку.
Виконання прикладів програм, які додаються до книги
Для виконання деяких прикладів з цієї книги потрібні файли, що додаються до неї. Ці програми не будуть працювати правильно, якщо ви просто скопіюєте їх текст.
Отже, після того як файли прикладів скопійовані в будь-яку папку на вашому комп'ютері, ви можете виконати їх наступним чином.
У Visual C # Express в меню File («Файл») клацніть Open project («Відкрити проект»)
Перейдіть до папки, в яку були збережені файли прикладів, і виберіть проект з розширенням csproj (C # project).
Натисніть зелену кнопку «Виконати».
Щоб спростити розгляд прикладів коду в книзі, ми вирішили дотримуватися певного порядку:
Погляньте на наступний приклад коду:
// Основний метод
static void Main ()
{
Application.Run (new MyButtonClass ());
}
// Метод обробника подій
void MyButtonClickEventHandler (object sender, EventArgs e)
{
mrButton.Text = "You clicked me!";
}
Приклади коду написані декількома відмінними від іншого тексту шрифтами (Courier New)
Будь-які слова або символи, «обрані нами», виділені курсивом. У прикладах вище це «MyButtonClass» і «mrButton».
Будь-які слова або символи, що є частиною мови C # або входять в. NET Framework, такі, як «static void Main ()» або «. Text», пишуться в звичайному стилі.
Жирний текст покликаний привернути вашу увагу.
Двома косими рисами («//») позначаються коментарі до коду (фактично, це можливість мови C #). Весь вміст рядка після цих символів пропускається комп'ютером. В наведеному вище прикладі це «/ / Основний метод».
У II частині книги описано більшість загальних понять і наводиться короткий виклад ключових понять. Такий короткий виклад називається «будівельним блоком». Розглянемо приклад будівельного блоку.
У більшості випадків потрібно натиснути кнопку «Ні», і у вікні «Список помилок» ви побачите деякі відомості про неї,включаючи зазначення номера рядка, в якому вона була знайдена. Клацніть двічі це опис, щоб перейти до рядка з помилкою та виправити її.
Будівельний блок: Класи
Усі програми на мові C # створюються всередині класів.Основна структура класу для комп'ютера має наступний вигляд:
class Animal
{
}
Можливо, ви захочете якийсь час повивчати функції Visual C # Express, переглянути файли довідки і зрозуміти, що собою являє ця програма. Навіть якщо ви новачок в C #, скоро ви зрозумієте, що для спілкування з комп'ютером недостатньо мати інструмент програмування - потрібно щось більше.
У такому випадку настав час перейти до наступної частини книги, і вчитися спілкуванню з комп'ютером на мові програмування C #.
Коротко в наступній серії частині
Образно пояснюється складність написання та розуміння комп'ютерних програм різною природою походження людини та комп'ютера: "У нас різні батьки". Пропонується таке вирішення проблеми:
знайти єдиний «погляд на світ»;
виробити спільну мову, яку здатні розуміти як люди, так і комп'ютери.
Далі йде історія про налагодження спілкування з прибульцем. Якась зголодніла "Свєта" на безлюдному острові зустріла прибульця та назвала його "Алджі". Щоб прибулець допоміг з харчами, Света навчила його людської (припустимо української) мови показуючи на картинки та предмети. Алджі швидко запам'ятав назви. Проте він не міг зрозуміти прохання Свєти дістати їй з дерева банан. Свєта надзвичайно довго страждає від такого непорозуміння. Згодом "вищі сили" підказують Свєті, що Алджі це й не Алджі зовсім а якийсь Зніфф12. Нарешті Свєта винаходить як розтлумачити прибульцю свої забаганки. Вона повідомляє "Алджі-Зніффа12-го" про те, що:
1. усі "об'єкти" об'єднані в "класи". (Света класифікує рослин в клас "рослини", тварини в клас "тварин" і т.д.);
2. кожен об'єкт має свої властивості. (Приміром слон "може рухатися", він "важкий" і він "вредний");
3. безперевно відбуваються "події" (Свєта зголодніла, поспіли кокоси і т.д.);
4. подію можна викликати. (Якщо викликати подію "знепокоєння слона" то це допоможе викликати подію "добування кокосів" через подію "слон вдарить пальму").
На таке пояснення Алджі видає, що сам належить до класу об'єктів, що звуться "Ікс-зніфферами". Всі об'єкти цього класу мають такі властивості:
- Name (наприклад ім'я прибульця, що спілкується зі Свєтою - Зніфф12);
- EarShape (ФормаВуха) (значення цієї властивості завжди «трубка»);
- LikeToWatchTV (ЛюблюДивитисяТелевізор) (у більшості випадків має значення істини, а в інших випадках - хиби (брехні).
Ще Алджі говорить про те, що зараз вони на зйомках телешоу "Залишитися у живих" але історія завершується як приклад встановлення порозуміння між представниками різних цивілізацій. Порозуміння це було знайдено практично в термінах та поняттях об'єктно-орієнтованого програмування (ООП).
Замість інопланетянина аналогічним чином можна порозумітися з комп'ютером хоча підхід з використанням «класів, об'єктів, властивостей, подій і методів» теж не є бездоганним. Існують та створюються інші способи для "пояснення" комп'ютеру навколишнього світу але мова C # вимагає дотримуватися саме об'єктно-орієнтованого підходу. Щоб комп'ютер став помічником необхідно: вивчити мову C#, навчитися описувати речі з орієнтацією на об'єкти, встановити середовище програмування C# та інші супутні програми.
Опис орієнтації на об'єкти з точки зору програміста.
Для угруповання подібних об'єктів навколишнього світу можна розділити їх на різні класи речей, такі як «коти» або «будинки» або «дерева».
Для комп'ютера необхідно створити деякий опис того чи іншого об'єкта вказавши його властивості.Їх можна порівняти з прикметниками в українській мові. Наприклад, кота "Пушок" можна описати такими властивостями як зріст, вага та іншими.
Події - це зміни, що відбуваються з об'єктом. У реальному світі події відбуваються безперервно. Наприклад, коли я гладжу Пушка, ця подія відбувається з ним. Подібним чином, вітер, що розвіває гілки дуба - це подія, що відбувається з деревом. Події, як правило, являють собою дії, що впливають на певний об'єкт, але сам об'єкт вплинути на них не може. У комп'ютерному світі подіями можуть бути «натискання кнопки» або «переміщення миші».
Дії виконуються об'єктом. Наприклад, кіт Пушок лиже свою шерсть - це дія. Приклад дії у комп'ютерному світі «малювання зображення кота при натисканні на кнопку».
Комп'ютер по-справжньому нерозумний, він не має уявлення про те як намалювати кота. Необхідно дати зрозумілий комп'ютеру опис - метод малювання кота. Метод подібний до рецепта. Це набір покрокових інструкцій, які визначають порядок малювання кота.
Ще приклад класів це класи у школі. Дітей певного віку або з певними здібностями об'єднали в групу і назвали її класом. Вони будуть навчатися приблизно однаково і здавати одні і ті ж іспити. Але це не означає, що всі учні класу однакові, а лише говорить про те, що у них є певні спільні риси.
Трохи пізніше ми додаємо другий вираз, яке скаже комп'ютеру: «Гей, пам'ятаєш об'єкт Barsik? Тепер мені потрібно виконати з ним дію. Звільни простір в голові для роздумів про цю тварину. Комп'ютер представляє новий об'єкт «Animal» в своїй голові і розуміє, що ви говорите про той же об'єкті (Barsik), згаданий раніше. Вивчивши клас «Animal», комп'ютеру стало дещо відомо про Барсика, і він тримає цю інформацію напоготові у своїй голові в надії на те, що отримає від вас додаткові дані або кілька запитань щодо Барсика.
Animal Barsik; // оголошення об'єкта
Barsik = new Animal (); // вказівка створити реальний об'єкт з яким можна виконувати дії
Урок додавання елементів до класу
Список властивостей тварин:
Вид тварини (Kind of animal)
Зріст (Height)
Довжина (Length)
Кількість лап (Number of legs)
Забарвлення (Color)
Наявність хвоста (Has a tail)
Ссавець (Is a mammal)
Можна присвоїти значення кожної з них
Kind of animal = «Cat»
Height = 50 cm
Length = 110 cm
Number of legs = 4
Color = «Black»
Has tail = true
Is mammal = true
У C # властивості називаються полями.
Існують різні типи полів.
Значення полів height, width і number of legs є числами. Ці значення придатні для виконання математичних операцій.
Значення полів kind of animal і color складатися з букв, скріплених разом. Це рядкові поля. Вони також можуть містити числа але з числами в рядку не можна виконувати математичні операції.
Поле has tail буде приймати значення ІСТИНА або БРЕХНЯ (true / false) ще ці ж значення називають ТАК чи НІ («yes / no»).
Кожен «тип» обробляється комп'ютером по-різному, тому при визначенні полів ми повинні вказувати їх тип.
Тип «String» (рядок)
string kindOfAnimal; // повідомить комп'ютер, що властивість kindOfAnimal потрібно розглядати як рядок літер.
Числові типи
Числове значення поля в мові C# можна позначити одним з декількох числових типів. Найбільш поширений - integer. Це ціле число, яке може бути негативним, позитивним чи нулем.
int numberOfLegs; // властивість numberOfLegs цілочисельного типу integer
Тип «Boolean» (логічне значення)
Годиться якщо деяке поле буде завжди приймає значення «true» або «false» і нічого крім цих значень. Це найпростіший з усіх типів.
bool hasTail; // властивість hasTail логічного типу
У C # опис класу для комп'ютера може мати наступний вигляд:
class Animal
{
}
Ми збираємося обговорювати клас об'єктів, ми назвемо цей клас Animal (тварина), весь опис цього класу буде розташовано між фігурними дужками {...}.
Ім'я класу «Animal» доречне у програмі, що стосується тварин. Ще приклади імен класів «MyPhotoProgram» (МояФотоПрограма) або «MyGradeCalculator» (МійРізновидКалькулятора). Об'єкти того чи іншого класу можуть і не існувати в реальному світі. Ім'я класу може бути будь-яким але доцільно вибирати таке ім'я, що вказує чим клас має справу.
Слово «class» має бути написано малими літерами, але ім'я класу може бути будь-яким і містити літери як прописні, так і малі. Використання проміжків (пробілів між словами) не допускається. Для спрощення читання й розуміння код слід писати на окремих рядках, але для комп'ютера це немає принципової різниці.
Наприклад є певна істота в класі тварин яку ви називаєте Барсиком. Це можна виразити таким чином:
Animal Barsik;
Комп'ютер це розуміє так: «Ця людина хоче поговорити про об'єкт у класі «Animal» і назвати його «Barsik». Однак код потрібно доповнити ще одним виразом:
Barsik = new Animal ();
Перший вираз попереджає комп'ютер, що незабаром ми попросимо його працювати з певним індивідуумом з класу «Animal». Тепер у комп'ютера з'являється можливість перевірити свої знання про цей клас. Він переглядає всю програму і шукає опис класу з ім'ям «Animal». Якщо він не знаходить такого об'єкта, то може попередити вас: «Ей, я не зможу цього зробити!». Якщо ж вдається знайти потрібний опис, він просто продовжить виконання програми, взявши до уваги, що ви пізніше попросите його виконати деяку дію з об'єктом класу «Animal» на ім'я Barsik.
Додавання полів у клас
Ми готові додати поля у визначення класу.
class Animal
{
string kindOfAnimal;
string name;
int numberOfLegs;
int height;
int length;
string color;
bool hasTail;
bool isMammal;
bool spellingCorrect;
}
(Щоб код легко читався створюються відступи полів пропусками та клавішею TAB)
Використання полів з певними об'єктами
Попросимо комп'ютер створити об'єкт - екземпляр класу «Animal» присвоївши значення кожному полю.
Animal Barsik;
Barsik = new Animal ();
Barsik.kindOfAnimal = "Cat";
Barsik.name = "Кіт Барсик";
Barsik.numberOfLegs = 4;
Barsik.height = 50;
Barsik.length = 110;
Barsik.color = "Black";
Barsik.hasTail = true;
Barsik.isMammal = true;
Значення рядкових полів завжди береться в лапки (""), але тільки не значення інших типів полів. В кінці кожного виразу ставиться крапка з комою (;). Вибране нами ім'я об'єкта «Barsik» не несе ніякого емоційного значення для комп'ютера. Він також легко працює з об'єктом іменованим «X»:
Animal X;
X = new Animal ();
X.kindOfAnimal = "Cat";
X.height = 50;
X.length = 110;
X.color = "Black";
X.hasTail = true;
X.isMammal = true;
При визначенні поля в програмі необхідно вказати його тип та ім'я:
string lastname;
Позначення типу повинно бути відоме комп'ютеру. Зазначені вище основні типи (як int) пишуться малими літерами, проте деякі типи можуть містити великі літери.
Іменем поля може бути будь-яке слово, наприклад «ZavzdiNapogotovi» з поєднанням великих і малих літер. Використання пропусків (пробілів) не допускається.
При роботі з певним об'єктом, полям як правило присвоюються значення що описують об'єкт. Якщо, наприклад, у нас є об'єкт з ім'ям schoolKid, то його полям можна було б присвоїти наступні значення:
schoolKid.firstName = "Jiminy";
schoolKid.age = 13;
Назва об'єкту та ім'я поля розділяються крапкою (.).
Отже, schoolKid.firstName = "Jiminy" означає «значення "Jiminy" підставити в поле firstName об'єкта schoolKid».
Закриті, захищені і відкриті поля
Якщо програма має два або більше класи то об'єкти можна брати з одного класу, такого як MyTestClass і говорити про об'єкти в іншому класі, такому як Animal.
class Animal
{
string kindOfAnimal;
string name;
int numberOfLegs;
int height;
int length;
string color;
bool hasTail;
bool isMammal;
bool spellingCorrect;
}
class MyTestClass
{
}
При оголошенні полів, ми можемо вирішити, чи повинні інші класи мати доступ до них чи ні. Іноді важливо робити поля закритими (private) щоб інший клас не поміщав в поля неправильні значення. Використання полів «private», «protected» і «public» визначає наскільки безпечним буде наш клас.
Отже, на початок оголошення поля ми можемо додати слово public:
class Animal
{
public string kindOfAnimal;
public string name;
public int numberOfLegs;
public int height;
public int length;
public string color;
bool hasTail;
protected bool isMammal;
private bool spellingCorrect;
}
Простий метод для комп'ютера може мати наступний вигляд:
void SayHello ()
{
}
Але метод не має сенсу, якщо він нічого не робить, тому давайте доповнимо код між фігурними дужками.
void SayHello ()
{
Console.WriteLine ("Hello");
}
(Щоб додати коду акуратний вигляд, необхідно створити відступи в методі за допомогою клавіші TAB)
Якщо зараз викликати цей метод, то на екран буде виведено слово «Hello». Це не надто складне завдання, тому і метод досить простий.
Що означає VOID?
Void означає «нічого». Використання «void» перед ім'ям методу означає, що коли завершується його виконання, повертається пусте значення, тобто нічого не повертається. Це не означає, що метод не виконує жодних дій, а скоріше те, що по завершенні відведеної операції він ніяких значень не повертає. У наведеному вище прикладі методу «SayHello» нам це чудово підходить, оскільки після написання слова «Hello» повертати нічого не потрібно.
Потрібне розуміння того, як відправляти значення в метод і отримувати значення з нього.
Уявімо, що вам потрібно, щоб комп'ютер вивів на екран наступний текст:
Hello Jo
Hello Sam
Hello You
Ось один спосіб, як це зробити: можна було б написати окремий метод для кожного випадку:
void WriteHelloJo ()
{
Console.WriteLine ("Hello Jo");
}
void WriteHelloSam ()
{
Console.WriteLine ("Hello Sam");
}
void WriteHelloYou ()
{
Console.WriteLine ("Hello You");
}
і потім викликати їх наступним чином:
WriteHelloJo ();
WriteHelloSam ();
WriteHelloYou ();
Але це зайва витрата сил. Можна використовувати один метод WriteHello і при кожному його виклик просто повідомляти потрібну частину, яка відрізняється від попередньої.
Метод:
void WriteHello (string someName)
{
Console.WriteLine ("Hello" + someName);
}
виклик методу:
WriteHello ("Jo");
WriteHello ("Sam");
WriteHello ("You");
При написанні методу подібним «розумним» чином,
void WriteHello (string someName)
{
Console.WriteLine ("Hello" + someName);
}
ми фактично кажемо: «Кожного разу при виклику цього методу я буду підставляти рядок символів з певним ім'ям. Код в дужках (string someName) називається параметром. Параметр дозволяє підставляти значення в метод при його виклику.
Для комп'ютера не має значення, яке ім'я ви присвоїли параметру, важливо щоб воно було єдиним при використанні в усьому методі. Наприклад, наступний код буде виконано правильно:
void WriteHello (string x)
{
Console.WriteLine ("Hello" + x);
}
А цей - ні:
void WriteHello( string someName )
{
Console.WriteLine( “Hello ” + someBodysName );
}
Можете знайти помилку? Параметри «SomeName» і «someBodysName» відрізняються - це заплутає нашого «електронного» друга і він «розгнівається».
Крім того, можна на повних правах використовувати більше одного параметру в методі. Для цього їх потрібно просто розділити комами:
void WriteHello( string firstName, string lastName )
{
Console.WriteLine( “Hello ” + firstName + “ ” + lastName );
}
Але потім при виклику методу важливо підставити правильну кількість значень
WriteHello( “Jiminy”, “Cricket” );
WriteHello ("Чорт забирай", "Боротьба");
У даному випадку на екран буде виведено текст «Hello Jiminy Cricket».
«Hello Чорт забирай Крикет».