русс | укр

C# - Головна
Контакти
Задайте питання...
Перегляд всіх питань


Простір імен
  ► System (5)
  ► Microsoft (1)


Для учнів (початківців)
  ► Відео уроки (4)
  ► Навчання (177)
  ► Приклади програм (19)
  ► Секрети Сі Шарп (4)

Для професіоналів
  ► Навчання (6)
  ► Приклади програм (1)










Змінні C#

Змінні і типи - тісно пов'язані поняття. З об'єктної точки зору змінна - це екземпляр типу. Скалярну змінну можна розглядати як сутність, що володіє іменем, значенням і типом. Ім'я та тип задаються при оголошенні змінної і залишаються незмінними на весь час її життя. Значення змінної може змінюватися в ході обчислень, ця можливість варіації значень і дало ім'я поняттю змінна (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 в цих операторах не відбувається.

 

Переглядів: 3009






© 2012 ci-sharp.ru При використанні матеріалу пряме iндексуюче посилання на сайт ОБОВ'ЯЗКОВЕ.
Права строго захищені нормами міжнародного права, інтелектуальної власності та авторського права.