русс | укр

C# - Главная
Контакты
Задайте вопрос...
Просмотр всех вопросов


Пространство имен
  ► System
  ► Microsoft


Для учеников (начинающих)
  ► Видео уроки
  ► Обучение
  ► Примеры программ
  ► Секреты в Си Шарп

Для профессионалов
  ► Обучение
  ► Примеры программ
  ► Задачки - для тебя!










Переменные 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.5f, w3 =w1+ w2 + 125.25f;

//допустимая инициализация в объектном стиле

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;

//Инициализация в if и for не рассматривается,

//поэтому s считается неинициализированной переменной

//Ошибка компиляции: использование неинициализированной переменной

//Console.WriteLine("s= {0}",s);

} //SimpleVars

 

В первой строке объявляются переменные x и s с отложенной инициализацией. Всякая попытка использовать еще не инициализированную переменную в правых частях операторов присваивания, в вызовах функций, вообще в вычислениях приводит к ошибке уже на этапе компиляции.

 

Последующие объявления переменных эквивалентны по сути, но демонстрируют два стиля инициализации - обычный и объектный. Обычная форма инициализации предпочтительнее не только в силу своей естественности, но она и более эффективна, поскольку в этом случае инициализирующее выражение может быть достаточно сложным, с переменными и функциями. На практике объектный стиль для скалярных переменных используется редко. Вместе с тем полезно понимать, что объявление с инициализацией int y =0 можно рассматривать как создание нового объекта (new) и вызова для него конструктора по умолчанию. При инициализации в объектной форме может быть вызван только конструктор по умолчанию, другие конструкторы с параметрами для встроенных типов не определены.

Откладывать инициализацию не стоит, как показывает пример с переменной s, объявленной с отложенной инициализацией. В вычислениях она дважды получает значение: один раз в операторе if, другой - в операторе цикла for. Тем не менее, при компиляции возникнет ошибка, утверждающая, что в процедуре WriteLine делается попытка использовать неинициализированную переменную s. Связано это с тем, что для операторов if и for на этапе компиляции не вычисляются условия, зависящие от переменных. Поэтому компилятор предполагает худшее - условия ложны, инициализация s в этих операторах не происходит.

 

Просмотров: 1551






© 2012 ci-sharp.ru При использовании материала прямая индексирующая ссылка на сайт ОБЯЗАТЕЛЬНА.
Права строго защищены нормами международного права, интеллектуальной собственности и авторского права.