355 500 произведений, 25 200 авторов.

Электронная библиотека книг » Герберт Шилдт » C# 4.0: полное руководство » Текст книги (страница 5)
C# 4.0: полное руководство
  • Текст добавлен: 6 апреля 2017, 04:00

Текст книги "C# 4.0: полное руководство"


Автор книги: Герберт Шилдт



сообщить о нарушении

Текущая страница: 5 (всего у книги 83 страниц)

Символы

В C# символы представлены не 8-разрядным кодом, как во многих других языках программирования, например C++, а 16-разрядным кодом, который называется уникодом (Unicode). В уникоде набор символов представлен настолько широко, что он охватывает символы практически из всех естественных языков на свете. Если для многих естественных языков, в том числе английского, французского и немецкого, характерны относительно небольшие алфавиты, то в ряде других языков, например китайском, употребляются довольно обширные наборы символов, которые нельзя представить 8-разрядным кодом. Для преодоления этого ограничения в C# определен тип char, представляющий 16-разрядные значения без знака в пределах от 0 до 65 535. При этом стандартный набор символов в 8-разрядном коде ASCII является подмножеством уникода в пределах от 0 до 127. Следовательно, символы в коде ASCII по-прежнему остаются действительными в С#.

Для того чтобы присвоить значение символьной переменной, достаточно заключить это значение (т.е. символ) в одинарные кавычки. Так, в приведенном ниже фрагменте кода переменной ch присваивается символ X.

char ch;

ch = 'X';

Значение типа char можно вывести на экран с помощью метода WriteLine(). Например, в следующей строке кода на экран выводится значение переменной ch.

Console'.WriteLine ("Значение ch равно: " + ch) ;

Несмотря на то что тип char определен в C# как целочисленный, его не следует путать со всеми остальными целочисленными типами. Дело в том, что в C# отсутствует автоматическое преобразование символьных значений в целочисленные и обратно. Например, следующий фрагмент кода содержит ошибку.

char ch;

ch = 88; // ошибка, не выйдет

Ошибочность приведенного выше фрагмента кода объясняется тем, что 88 – это целое значение, которое не преобразуется автоматически в символьное. При попытке скомпилировать данный фрагмент кода будет выдано соответствующее сообщение об ошибке. Для того чтобы операция присваивания целого значения символьной переменной оказалась допустимой, необходимо осуществить приведение типа, о котором речь пойдет далее в этой главе.


Логический тип данных

Тип bool представляет два логических значения: «истина» и «ложь». Эти логические значения обозначаются в C# зарезервированными словами true и false соответственно. Следовательно, переменная или выражение типа bool будет принимать одно из этих логических значений. Кроме того, в C# не определено взаимное преобразование логических и целых значений. Например, 1 не преобразуется в значение true, а 0 – в значение false.

В приведенном ниже примере программы демонстрируется применение типа bool.

// Продемонстрировать применение типа bool.

using System;

class BoolDemo {

  static void Main() {

    bool b;

    b = false;

    Console.WriteLine("b равно " + b);

    b = true;

    Console.WriteLine("b равно " + b);

    // Логическое значение может управлять оператором if.

    if(b) Console.WriteLine(«Выполняется.»);

    b = false;

    if(b) Console.WriteLine(«He выполняется.»);

    // Результатом выполнения оператора отношения

    // является логическое значение.

    Console.WriteLine("10 > 9 равно " + (10 > 9));

  }

}

Эта программа дает следующий результат.

b равно False

b равно True

Выполняется.

10 > 9 равно True

В приведенной выше программе обнаруживаются три интересные особенности. Во-первых, при выводе логического значения тийа bool с помощью метода WriteLine() на экране появляется значение 'True" или «False». Во-вторых, самого значения переменной типа bool достаточно для управления оператором if. Для этого не нужно, например, записывать оператор if следующим образом.

if(b == true) . . .

И в-третьих, результатом выполнения оператора отношения является логическое значение. Именно поэтому в результате вычисления выражения 10 > 9 на экран выводится значение «True.» Кроме того, выражение 10 > 9 следует заключить в скобки, поскольку оператор + имеет более высокий приоритет, чем оператор >.


Некоторые возможности вывода

До сих пор при выводе с помощью метода WriteLine() данные отображались в формате, используемом по умолчанию. Но в среде .NET Framework определен достаточно развитый механизм форматирования, позволяющий во всех деталях управлять выводом данных. Форматированный ввод-вывод подробнее рассматривается далее в этой книге, а до тех пор полезно ознакомиться с некоторыми возможностями форматирования. Они позволяют указать, в каком именно виде следует выводить значения с помощью метода WriteLine(). Благодаря этому выводимый результат выглядит более привлекательно. Следует, однако, иметь в виду, что механизм форматирования поддерживает намного больше возможностей, а не только те, которые рассматриваются в этом разделе.

При выводе списков данных в предыдущих примерах программ каждый элемент списка приходилось отделять знаком +, как в следующей строке.

Console.WriteLine("Вы заказали " + 2 +

« предмета по цене $» + 3 + « каждый.»);

Конечно, такой способ вывода числовой информации удобен, но он не позволяет управлять внешним видом выводимой информации. Например, при выводе значения с плавающей точкой нельзя определить количество отображаемых десятичных разрядов. Рассмотрим оператор

Console.WriteLine("Деление 10/3 дает: " + 10.0/3.0);

который выводит следующий результат.

Деление 10/3 дает: 3.33333333333333

В одних случаях такого вывода может оказаться достаточно, а в других – он просто недопустим. Например, в финансовых расчетах после десятичной точки принято указывать лишь два десятичных разряда.

Для управления форматированием числовых данных служит другая форма метода WriteLine(), позволяющая встраивать информацию форматирования, как показано ниже.

WriteLine(«форматирующая строка», argO, argl, ... , argN);

В этой форме аргументы метода WriteLine() разделяются запятой, а не знаком +. А форматирующая строка состоит из двух элементов: обычных печатаемых символов, предназначенных для вывода в исходном виде, а также спецификаторов формата. Последние указываются в следующей общей форме:

{argnum, width: fmt}

где argnum – номер выводимого аргумента, начиная с нуля; width – минимальная ширина поля; fmt — формат. Параметры width и fmt являются необязательными.

Если во время выполнения в форматирующей строке встречается спецификатор формата, то вместо него подставляется и отображается соответствующий аргумент, обозначаемый параметром argnum. Таким образом, местоположение спецификатора формата в форматирующей строке определяет место отображения соответствующих данных. Параметры width и fmt'указывать необязательно. Это означает, что в своей простейшей форме спецификатор формата обозначает конкретный отображаемый аргумент. Например, спецификатор { 0 } обозначает аргумент агдО, спецификатор {1} – аргумент argl и т.д.

Начнем с самого простого примера. При выполнение оператора

Console.WriteLine(«В феврале {0} или {1} дней.», 28, 29);

получается следующий результат.

В феврале 28 или 29 дней

Как видите, значение 2 8 подставляется вместо спецификатора { 0 }, а значение 2 9 – вместо спецификатора {1}. Следовательно, спецификаторы формата обозначают место в строке, где отображаются соответствующие аргументы (в данном случае – значения 28 и 29). Кроме того, обратите внимание на то, что дополнительные значения разделяются запятой, а не знаком +.

Ниже приведен видоизмененный вариант предыдущего оператора, в котором указывается ширина полей.

Console.WriteLine(«В феврале {0,10} или {1,5} дней.», 28, 29);

Выполнение этого оператора дает следующий результат.

В феврале    28 или    29 дней.

Как видите, неиспользуемые части полей заполнены пробелами. Напомним, что минимальная ширина поля определяется параметром width. Если требуется, она может быть превышена при выводе результата.

Разумеется, аргументы, связанные с командой форматирования, не обязательно должны быть константами. Ниже приведен пример программы, которая выводит таблицу результатов возведения чисел в квадрат и куб. В ней команды форматирования используются для вывода соответствующих значений.

// Применить команды форматирования.

using System;

class DisplayOptions {

  static void Main() {

    int i;

    Console.WriteLine («ЧислоtКвадратtКуб») ;

    for(i = 1; i < 10; i++)

      Console.WriteLine(«{0}t{1}t{2}», i, i*i, i*i*i);

  }

}

Результат выполнения этой программы выглядит следующим образом.

Число Квадрат Куб

1      1       1

2     4       8

3      9       27

4     16      64

5     25      125

6     36      216

7      49      343

8     64      512

9      81      729

В приведенных выше примерах сами выводимые значения не форматировались. Но ведь основное назначение спецификаторов формата – управлять внешним видом выводимых данных. Чаще всего форматированию подлежат следующие типы данных: с плавающей точкой и десятичный. Самый простой способ указать формат данных – описать шаблон, который будет использоваться в методе WriteLine(). Для этого указывается образец требуемого формата с помощью символов #, обозначающих разряды чисел. Кроме того, можно указать десятичную точку и запятые, разделяющие цифры. Ниже приведен пример более подходящего вывода результата деления 10 на 3.

Console.WriteLine(«Деление 10/3 дает: {0:#.##}», 10.0/3.0);

Выполнение этого оператора приводит к следующему результату.

Деление 10/3 дает: 3.33

В данном примере шаблон #.## указывает методу WriteLine() отобразить два десятичных разряда в дробной части числа. Следует, однако, иметь в виду, что метод WriteLine() может отобразить столько цифр слева от десятичной точки, сколько потребуется для правильной интерпретации выводимого значения.

Рассмотрим еще один пример. Оператор

Console.WriteLine(«{0:###,###.##}», 123456.56) ;

дает следующий результат.

123,456.56

Для вывода денежных сумм, например, рекомендуется использовать спецификатор формата С.

decimal balance; balance = 12323.09m;

Console.WriteLine(«Текущий баланс равен {0:C}», balance);

Результат выполнения этого фрагмента кода выводится в формате денежных сумм, указываемых в долларах США.

Текущий баланс равен $12,323.09

Форматом С можно также воспользоваться, чтобы представить в более подходящем виде результат выполнения рассматривавшейся ранее программы расчета цены со скидкой.

// Использовать спецификатор формата С для вывода

// результата в местной валюте.

using System;

class UseDecimal {

  static void Main() {

    decimal price;

    decimal discount;

    decimal discounted_price;

    // рассчитать цену со скидкой,

    price = 19.95m;

    discount = 0.15m; // норма скидки составляет 15%

    discounted_price = price – ( price * discount);

    Console.WriteLine(«Цена со скидкой: {0:C}», discounted_price);

  }

}

Вот как теперь выглядит результат выполнения этой программы.

Цена со скидкой: 16,96 грн.


Литералы

В C# литералами называются постоянные значения, представленные в удобной для восприятия форме. Например, число 100 является литералом. Сами литералы и их назначение настолько понятны, что они применялись во всех предыдущих примерах программ без всяких пояснений. Но теперь настало время дать им формальное объяснение.

В C# литералы могут быть любого простого типа. Представление каждого литерала зависит от конкретного типа. Как пояснялось ранее, символьные литералы заключаются в одинарные кавычки. Например, 'а' и '%' являются символьными литералами.

Целочисленные литералы указываются в виде чисел без дробной части. Например, 10 и -100 – это целочисленные литералы. Для обозначения литералов с плавающей точкой требуется указывать десятичную точку и дробную часть числа. Например, 11.123 – это литерал с плавающей точкой. Для вещественных чисел с плавающей точкой в C# допускается также использовать экспоненциальное представление.

У литералов должен быть также конкретный тип, поскольку C# является строго типизированным языком. В этой связи возникает естественный вопрос: к какому типу следует отнести числовой литерал, например 2,123987 или 0.23? К счастью, для ответа на этот вопрос в C# установлен ряд простых для соблюдения правил.

Во-первых, у целочисленных литералов должен быть самый мелкий целочисленный тип, которым они могут быть представлены, начиная с типа int. Таким образом, у целочисленных литералов может быть один из следующих типов: int, uint, long или ulong в зависимости от значения литерала. И во-вторых, литералы с плавающей точкой относятся к типу double.

Если вас не устраивает используемый по умолчанию тип литерала, вы можете явно указать другой его тип с помощью суффикса. Так, для указания типа long к литералу присоединяется суффикс l или L. Например, 12 – это литерал типа int, a 12L – литерал типа long. Для указания целочисленного типа без знака к литералу присоединяется суффикс u или U. Следовательно, 100 – это литерал типа int, a 100U – литерал типа uint. А для указания длинного целочисленного типа без знака к литералу присоединяется суффикс ul или UL. Например, 984375UL – это литерал типа ulong.

Кроме того, для указания типа float к литералу присоединяется суффикс F или f. Например, 10.19F – это литерал типа float. Можете даже указать тип double, присоединив к литералу суффикс d или D, хотя это излишне. Ведь, как упоминалось выше, по умолчанию литералы с плавающей точкой относятся к типу double.

И наконец, для указания типа decimal к литералу присоединяется суффикс m или М. Например, 9.95М – это десятичный литерал типа decimal.

Несмотря на то что целочисленные литералы образуют по умолчанию значения типа int, uint, long или ulong, их можно присваивать переменным типа byte, sbyte, short или ushort, при условии, что присваиваемое значение может быть представлено целевым типом.


Шестнадцатеричные литералы

Вам, вероятно, известно, что в программировании иногда оказывается проще пользоваться системой счисления по основанию 16, чем по основанию 10. Система счисления по основанию 16 называется шестнадцатеричной. В ней используются числа от 0 до 9, а также буквы от А до F, которыми обозначаются десятичные числа 10,11,12,13, 14 и 15. Например, десятичному числу 16 соответствует шестнадцатеричное число 10. Вследствие того что шестнадцатеричные числа применяются в программировании довольно часто, в C# разрешается указывать целочисленные литералы в шестнадцатеричном формате. Шестнадцатеричные литералы должны начинаться с символов Ох, т.е. нуля и последующей латинской буквы «икс». Ниже приведены некоторые примеры шестнадцатеричных литералов.

count = OxFF; // 255 в десятичной системе

incr = 0x1а;    //    26 в десятичной системе


Управляющие последовательности символов

Большинство печатаемых символов достаточно заключить в одинарные кавычки, но набор в текстовом редакторе некоторых символов, например возврата каретки, вызывает особые трудности. Кроме того, ряд других символов, в том числе одинарные и двойные кавычки, имеют специальное назначение в С#, поэтому их нельзя использовать непосредственно. По этим причинам в C# предусмотрены специальные управляющие последовательности символов, иногда еще называемые константами с обратной косой чертой (табл. 3.2). Такие последовательности применяются вместо тех символов, которых они представляют.

Таблица 3.2. Управляющие последовательности символов

Управляющая

последователь-

ность           Описание

a   Звуковой сигнал (звонок)

b   Возврат на одну позицию

f   Перевод страницы (переход на новую страницу)

n   Новая строка (перевод строки)

r   Возврат каретки

t   Горизонтальная табуляция

v   Вертикальная табуляция

   Пустой символ

'   Одинарная кавычка

"   Двойная кавычка

\   Обратная косая черта

Например, в следующей строке кода переменной ch присваивается символ табуляции.

ch = 't';

А в приведенном ниже примере кода переменной ch присваивается символ одинарной кавычки.

ch = ''';


Строковые литералы

В C# поддерживается еще один тип литералов – строковый. Строковый литерал представляет собой набор символов, заключенных в двойные кавычки. Например следующий фрагмент кода:

«это тест»

представляет собой текстовую строку. Образцы подобных строк не раз встречались в приведенных выше примерах программ.

Помимо обычных символов, строковый литерал может содержать одну или несколько управляющих последовательностей символов, о которых речь шла выше. Рассмотрим для примера программу, в которой используются управляющие последовательности n и t.

// Продемонстрировать применение управляющих

// последовательностей символов в строковых литералах.

using System;

class StrDemo {

  static void Main() {

    Console.WriteLine(«Первая строкаnВторая строкаnТретья строка»);

    Console.WriteLine(«ОдинtДваtТри»);

    Console.WriteLine(«ЧетыреtПятьtШесть» ) ;

    // Вставить кавычки.

    Console.WriteLine(""3ачем?", спросил он.");

  }

}

Результат выполнения этой программы приведен ниже.

Первая строка

Вторая строка

Третья строка

Один     Два     Три

Четыре Пять    Шесть

«Зачем?», спросил он.

В приведенном выше примере программы обратите внимание на то, что для перехода на новую строку используется управляющая последовательность n. Для вывода нескольких строк совсем не обязательно вызывать метод WriteLine() несколько раз – достаточно вставить управляющую последовательность n в тех местах удлиненной текстовой строки (или строкового литерала), где должен происходить переход на новую строку. Обратите также внимание на то, как в текстовой строке формируется знак кавычек.

Помимо описанной выше формы строкового литерала, можно также указать буквальный строковый литерал. Такой литерал начинается с символа @, после которого следует строка в кавычках. Содержимое строки в кавычках воспринимается без изменений и может быть расширено до двух и более строк. Это означает, что в буквальный строковый литерал можно включить символы новой строки, табуляции и прочие, не прибегая к управляющим последовательностям. Единственное исключение составляют двойные кавычки ("), для указания которых необходимо использовать две двойные кавычки подряд (" "). В приведенном ниже примере программы демонстрируется применение буквальных строковых литералов.

// Продемонстрировать применение буквальных строковых литералов,

using System;

class Verbatim {   

static void Main() {

    Console.WriteLine(@"Это буквальный

строковый литерал,

занимающий несколько строк.

") ;

    Console.WriteLine(@"А это вывод с табуляцией:

1    2    3    4

5    6    7    8

");

    Console.WriteLine(@"Отзыв программиста: «„Мне нравится С#.“»");

  }

}

Результат выполнения этой программы приведен ниже.

Это буквальный

строковый литерал,

занимающий несколько строк.

А это вывод с-табуляцией:

1    2    3    4

5    6    7    8

Отзыв программиста: «Мне нравится С#.»

Следует особо подчеркнуть, что буквальные строковые литералы выводятся в том же виде, в каком они введены в исходном тексте программы.

Преимущество буквальных строковых литералов заключается в том, что они позволяют указать в программе выводимый результат именно так, как он должен выглядеть на экране. Но если выводится несколько строк, то переход на новую строку может нарушить порядок набора исходного текста программы с отступами. Именно по этой причине в примерах программ, приведенных в этой книге, применение буквальных строковых литералов ограничено. Тем не менее они приносят немало замечательных выгод во многих случаях, когда требуется форматирование выводимых результатов.

И последнее замечание: не путайте строки с символами. Символьный литерал, например 'X', обозначает одиночную букву типа char. А строка, состоящая из одного символа, например "X", по-прежнему остается текстовой строкой.


Более подробное рассмотрение переменных

Переменные объявляются с помощью оператора следующей формы:

тип имя_переменной;

где тип – это тип данных, хранящихся в переменной; а имя_переменной – это ее имя. Объявить можно переменную любого действительного типа, в том числе и описанных выше типов значений. Важно подчеркнуть, что возможности переменной определяются ее типом. Например, переменную типа bool нельзя использовать для хранения числовых значений с плавающей точкой. Кроме того, тип переменной нельзя изменять в течение срока ее существования. В частности, переменную типа int нельзя преобразовать в переменную типа char.

Все переменные в C# должны быть объявлены до их применения. Это нужно для того, чтобы уведомить компилятор о типе данных, хранящихся в переменной, прежде чем он попытается правильно скомпилировать любой оператор, в котором используется переменная. Это позволяет также осуществлять строгий контроль типов в С#.

В C# определено несколько различных видов переменных. Так, в предыдущих примерах программ использовались переменные, называемые локальными, поскольку они объявляются внутри метода.


Инициализация переменной

Задать значение переменной можно, в частности, с помощью оператора присваивания, как было не раз продемонстрировано ранее. Кроме того, задать начальное значение переменной можно при ее объявлении. Для этого после имени переменной указывается знак равенства (=) и присваиваемое значение. Ниже приведена общая форма инициализации переменной:

тип имя_переменной = значение;

где значение – это конкретное значение, задаваемое при создании переменной. Оно должно соответствовать указанному типу переменной.

Ниже приведены некоторые примеры инициализации переменных.

int count = 10; //    задать начальное значение 10 переменной count.

char ch = 'X';  // инициализировать переменную ch буквенным значением X.

float f = 1.2F  //    переменная    f    инициализируется    числовым    значением 1,2.

Если две или более переменные одного и того же типа объявляются списком, разделяемым запятыми, то этим переменным можно задать, например, начальное значение.

int a, b=8, с=19, d; // инициализировать переменные b и с

В данном примере инициализируются только переменные b и с.


Динамическая инициализация

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

// Продемонстрировать динамическую инициализацию.

using System;

class Dynlnit {

  static void Main() {

    // Длина сторон прямоугольного треугольника.

    double s1 = 4.0;

    double s2 = 5.0;

    // Инициализировать переменную hypot динамически,

    double hypot = Math.Sqrt( (s1 * s1) + (s2 * s2) );

    Console.Write("Гипотенуза треугольника со сторонами "

             + s1 + " и " + s2 + " равна ");

    Console.WriteLine(«{0:#.###}.», hypot);

  }

}

Результат выполнения этой программы выглядит следующим образом.

Гипотенуза треугольника со сторонами 4 и 5 равна 6.403

В данном примере объявляются три локальные переменные: s1, s2 и hypot. Две из них (s1 и s2) инициализируются константами, А третья (hypot) динамически инициализируется вычисляемой длиной гипотенузы. Для такой инициализации используется выражение, указываемое в вызываемом методе Math.Sqrt(). Как пояснялось выше, для динамической инициализации пригодно любое выражение, действительное на момент объявления переменной. А поскольку вызов метода Math.Sqrt() (или любого другого библиотечного метода) является действительным на данный момент, то его можно использовать для инициализации переменной hypot. Следует особо подчеркнуть, что в выражении для инициализации можно использовать любой элемент, действительный на момент самой инициализации переменной, в том числе вызовы методов, другие переменные или литералы.


Неявно типизированные переменные

Как пояснялось выше, все переменные в C# должны быть объявлены. Как правило, при объявлении переменной сначала указывается тип, например int или bool, а затем имя переменной. Но начиная с версии C# 3.0, компилятору предоставляется возможность самому определить тип локальной переменной, исходя из значения, которым она инициализируется. Такая переменная называется неявно типизированной.

Неявно типизированная переменная объявляется с помощью ключевого слова var и должна быть непременно инициализирована. Для определения типа этой переменной компилятору служит тип ее инициализатора, т.е. значения, которым она инициализируется. Рассмотрим такой пример.

var е = 2.7183;

В данном примере переменная е инициализируется литералом с плавающей точкой, который по умолчанию имеет тип double, и поэтому она относится к типу double. Если бы переменная е была объявлена следующим образом:

var е = 2.7183F;

то она была бы отнесена к типу float.

В приведенном ниже примере программы демонстрируется применение неявно типизированных переменных. Он представляет собой вариант программы из предыдущего раздела, измененной таким образом, чтобы все переменные были типизированы неявно.

// Продемонстрировать применение неявно типизированных переменных,

using System;

class ImplicitlyTypedVar {

  static void Main() {

    //Эти переменные типизированы неявно. Они отнесены

    // к типу double, поскольку инициализирующие их

    // выражения сами относятся к типу double,

    var s1 = 4.0;

    var s2 = 5.0;

    //Итак, переменная hypot типизирована неявно и

    // относится к типу double, поскольку результат,

    // возвращаемый методом Sqrt(), имеет тип double,

    var hypot = Math.Sqrt((s1 * s1) + (s2 * s2));

    Console.Write("Гипотенуза треугольника со сторонами "

             + s1 + " by " + s2 + " равна ");

    Console.WriteLine(«{0:#.###}.», hypot);

    // Следующий оператор не может быть скомпилирован,

    // поскольку переменная s1 имеет тип double и

    // ей нельзя присвоить десятичное значение.

    // s1 = 12.2М; // Ошибка!

  }

}

Результат выполнения этой программы оказывается таким же, как и прежде. Важно подчеркнуть, что неявно типизированная переменная по-прежнему остается строго типизированной. Обратите внимание на следующую закомментированную строку из приведенной выше программы.

// s1 = 12.2М; // Ошибка!

Эта операция присваивания недействительна, поскольку переменная s1 относится к типу double. Следовательно, ей нельзя присвоить десятичное значение. Единственное отличие неявно типизированной переменной от обычной, явно типизированной переменной, – в способе определения ее типа. Как только этот тип будет определен, он закрепляется за переменной до конца ее существования. Это, в частности, означает, что тип переменной s1 не может быть изменен по ходу выполнения программы.

Неявно типизированные переменные внедрены в C# не для того, чтобы заменить собой обычные объявления переменных. Напротив, неявно типизированные переменные предназначены для особых случаев, и самый примечательный из них имеет отношение к языку интегрированных запросов (LINQ), подробно рассматриваемому в главе 19. Таким образом, большинство объявлений переменных должно и впредь оставаться явно типизированными, поскольку они облегчают чтение и понимание исходного текста программы.

И последнее замечание: одновременно можно объявить только одну неявно типизированную переменную. Поэтому объявление

var s1 =4.0, s2=5.0; // Ошибка!

является неверным и не может быть скомпилировано. Ведь в нем предпринимается попытка объявить обе переменные, s1 и s2, одновременно.


    Ваша оценка произведения:

Популярные книги за неделю