C# - Головна Простір імен
► System (5)► Microsoft (1) Для учнів (початківців)
► Відео уроки (4)► Навчання (177) ► Приклади програм (19) ► Секрети Сі Шарп (4) Для професіоналів
► Навчання (6)► Приклади програм (1) |
ЗмінніЗмінні і типи - тісно пов'язані поняття. З об'єктної точки зору змінна - це екземпляр типу. Скалярну змінну можна розглядати як сутність, що володіє іменем, значенням і типом. Ім'я та тип задаються при оголошенні змінної і залишаються незмінними на весь час її життя. Значення змінної може змінюватися в ході обчислень, ця можливість варіації значень і дало ім'я поняттю змінна (Variable) в математиці та програмуванні. Отримання початкового значення змінної називається її ініціалізацією. Важливою новинкою мови C# є вимога обов'язкової ініціалізації змінної до початку її використання. Спроба використовувати неинициализированную змінну призводить до помилок, що виявляються ще на етапі компіляції. Ініціалізація змінних, як правило, виконується в момент оголошення, хоча і може бути відкладена. Загальний синтаксис оголошення сутностей в C# схожий на синтаксис оголошення в C++, хоча і має ряд відмінностей. Ось яка загальна структура оголошення:
[<атрибути>] [<модифікатори>] <тип> <объявители>;
При оголошенні змінних найчастіше задаються модифікатори доступу public, private, і інші. Якщо атрибути і модифікатори можуть не зазначатися в оголошенні, то завдання типу необхідно завжди. При оголошенні простих змінних вказується їх тип і список объявителей, де объявитель - це ім'я чи ім'я з ініціалізацією. Список объявителей дозволяє в одному оголошенні задати кілька змінних одного типу. Якщо объявитель задається ім'ям змінної, то має місце оголошення з відкладеним ініціалізацією. Хороший стиль програмування припускає завдання ініціалізації змінної в момент її оголошення. Ініціалізацію можна здійснювати двояко - звичайним присвоюванням або в об'єктній манері. У другому випадку для змінної використовується конструкція new і викликається конструктор за замовчуванням. Процедура SimpleVars ілюструє різні способи оголошення змінних і найпростіші обчислення над ними:
public void SimpleVars() { //Оголошення локальних змінних int x, s; //без ініціалізації int y =0, u = 77; //звичайний спосіб ініціалізації //допустима ініціалізація float w1=0f, w2 = 5.5 f, w3 =w1+ w2 + 125.25 f; //допустима ініціалізація в об'єктному стилі int z= new int(); //Неприпустима ініціалізація. //Конструктор з параметрами не визначено //int v = new int(77); x=u+y; //тепер x ініціалізована if(x> 5) s = 4; for (x=1; x<5; x++) s=5; //Ініціалізація в for if і не розглядається, //s тому вважається неинициализированной змінної //Помилка компіляції: використання неинициализированной змінної //Console.WriteLine("s= {0}",s); } //SimpleVars
У першій рядку оголошуються змінні x і s з відкладеним ініціалізацією. Всяка спроба використовувати ще не инициализированную змінну в правих частинах операторів присвоювання, в виклики функцій, взагалі в обчисленнях призводить до помилки вже на етапі компіляції.
Наступні оголошення змінних еквівалентні по суті, але демонструють два стилю ініціалізації - звичайний і об'єктний. Звичайна форма ініціалізації краще не тільки в силу своєї природності, але вона і більш ефективна, оскільки в цьому випадку инициализирующее вираз може бути досить складним, з змінними і функціями. На практиці об'єктний стиль для скалярних змінних використовується рідко. Разом з тим корисно розуміти, що оголошення з ініціалізацією int y =0 можна розглядати як створення нового об'єкта (new) і виклику для нього конструктора за замовчуванням. При ініціалізації в об'єктній формі може бути викликаний тільки конструктор за замовчуванням, інші конструктори з параметрами для вбудованих типів не визначені. Відкладати ініціалізацію не варто, як показує приклад з змінної s, оголошеної з відкладеним ініціалізацією. В обчисленнях вона двічі отримує значення: один раз в операторі if, інший - в операторі циклу for. Тим не менш, при компіляції виникне помилка, яка стверджує, що в процедурі WriteLine робиться спроба використовувати неинициализированную змінну s. Пов'язано це з тим, що для операторів if і for на етапі компіляції не обчислюються умови, залежні від змінних. Тому компілятор припускає найгірше - умови помилкові, ініціалізація s в цих операторах не відбувається.
Переглядів: 1716 |