Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Операторы, типы операторов, выражения и виды операторовСодержание книги
Похожие статьи вашей тематики
Поиск на нашем сайте
Операторы, типы операторов, выражения и виды выражений
1. Справочная таблица операторов по категориям (со ссылками на MSDN)
Язык C# предоставляет большой набор операторов, которые представляют собой символы, определяющие операции, которые необходимо выполнить с выражением. Операции над целыми типами, такие как ==, !=, <, >, <=, >=, binary +, binary -, ^, &, |, ~, ++, -- и sizeof обычно разрешены в перечислениях. Кроме того, многие операторы могут перегружаться пользователем. Таким образом, их значение при применении к пользовательскому типу меняется. В следующей таблице представлен список операторов C#, сгруппированных в порядке приоритета. Операторы в каждой группе имеют одинаковый приоритет. Каждый оператор содержит ссылку на официальный источник информации по программированию на языке C#: MSDN, а конкретно в раздел Библиотека, Справочник по C# (http://msdn.microsoft.com/ru-ru/library/618ayhy6.aspx):
Типы операторов
Действия программы выражаются в операторах. В общие действия включено объявление переменных, присвоение значений, вызов методов, проход по коллекциям и ветвление на один или другой блок кода, в зависимости от заданного условия. Порядок выполнения операторов в программе называется потоком управления или потоком выполнения. Поток управления может отличаться при каждом запуске программы, в зависимости от реакции программы на входные данные, которые она получает во время выполнения. Оператор может состоять из одной строки кода, которая заканчивается точкой с запятой, или из ряда однострочных операторов в блоке. Блок оператора заключен в скобки ({}) и может содержать вложенные блоки.
В приведённой ниже таблице перечислены различные типы операторов в C# и связанные с ними ключевые слова:
Внедрённые операторы
В некоторых операторах, включая do, while, for и foreach, всегда есть внедренный оператор, следующий за ними. Этот внедрённый оператор может быть либо одним оператором, либо несколькими операторами, заключенными в скобки ({}) в блоке оператора. Даже однострочные внедренные операторы могут быть заключены в скобки ({}), как показано в следующем примере:
// Рекомендуемый стиль блока foreach (string s in System.IO.Directory.GetDirectories( System.Environment.CurrentDirectory)) { System.Console.WriteLine(s); } // Не рекомендуемый foreach (string s in System.IO.Directory.GetDirectories( System.Environment.CurrentDirectory)) System.Console.WriteLine(s);
Внедрённый оператор, не заключенный в скобки ({}), не может быть оператором объявления или помеченным оператором. Это показано в следующем примере: if (pointB == true) // Ошибка CS1023 int radius = 5;
Чтобы устранить ошибку, поместим внедрённый оператор в блок:
if (b == true) { // OK DateTime d = System.DateTime.Now; Console.WriteLine(d.ToLongDateString()); }
Вложенные блоки операторов
Блоки операторов могут быть вложенными, как показано в следующем коде:
foreach (string s in System.IO.Directory.GetDirectories( System.Environment.CurrentDirectory)) { if (s.StartsWith("CSharp")) { if (s.EndsWith("TempFolder")) { return s; } }
} return "Not found.";
5. Недостижимые операторы
Если компилятор определяет, что поток управления ни при каких обстоятельствах не сможет достичь определенного оператора, то он выдаст предупреждение CS0162, как показано в следующем примере:
// Недостижимый код организуем так const int val = 5; if (val < 4) { System.Console.WriteLine("Я никогда ничего не напишу:(."); // CS0162: "Обнаружен недостижимый код" }
Выражения
Выражение представляет собой последовательность из одного или нескольких операндов и от нуля до нескольких операторов, которую можно вычислить, получив в результате одно значение, объект, метод или пространство имён. Выражение может состоять из литерала, вызова метода, оператора или его операнды, а также из простого имени. В качестве простого имени может выступать имя переменной, члена типа, параметра метода, пространства имен или типа. В выражении могут использоваться операторы, которые, в свою очередь, в качестве параметров используют другие выражения, либо вызовы методов, для определения параметров которых вызываются другие методы. Таким образом, выражения могут быть как простыми, так и очень сложными. Ниже представлено два примера выражений:
((x < 10) && (x > 5)) || ((x > 20) && (x < 25)) System.Convert.ToInt32("35")
7. Значения выражений
В большинстве контекстов, в которых используются выражения, например, в операторах или в параметрах методов, предполагается, что результатом вычисления выражения будет какое-то значение. Если x и y — целые числа, то результатом вычисления выражения x + y будет числовое значение. Результатом вычисления выражения new MyClass() будет ссылка на новый экземпляр объекта MyClass. Результатом вычисления выражения myClass.ToString() является строка, поскольку она является возвращаемым типом метода. Однако хотя имя пространства имён классифицируется как выражение, значение не будет результатом его вычисления и, поэтому, оно никогда не будет конечным результатом какого-либо выражения. Имя пространства имен нельзя передать параметру метода, или использовать его в новом выражении, или присвоить его переменной. Его можно использовать только как часть выражения в более крупном выражении. Это также относится к типам (в отличие от объектов System.Type), именам групп методов (в отличие от отдельных методов) и к методам доступа к событиям add и remove. У каждого значения есть связанный с ним тип. Например, если x и y — переменные типа int, то значение выражения x + y также типизируется как int. Если значение присвоено переменной другого типа или если x и y принадлежат к разным типам, то применяются правила преобразования типов.
Таким образом, если в выражении присутствует переменная, свойство объекта или индексатор объекта, для вычисления выражения используется значение этого элемента. В C# выражение можно использовать везде, где требуется значение или объект, если результат вычисления выражения соответствует требуемому типу.
8. Арифметическое переполнение
Числовые выражения могут привести к переполнениям, если значение больше максимального значения типа значения.
Арифметические операторы (+, -, *, /) могут выдавать результаты, находящиеся за пределами интервала возможных величин используемого числового типа. С подробными сведениями следует знакомиться в разделе, посвященном определенному оператору, но, в общем, действуют следующие правила:
При возникновении целочисленного переполнения событие зависит от контекста выполнения, который может иметь значение checked или unchecked (проверяемый или непроверяемый).В случае проверяемого контекста вызывается исключение OverflowException. В случае непроверяемого контекста старшие разряды результата отбрасываются и выполнение программы продолжается. Таким образом, язык C# дает возможность выбора — обрабатывать или игнорировать переполнение. Кроме арифметических операторов переполнение могут вызывать приведения целочисленного типа к целочисленному типу, например приведение типа long к типу int. На такие приведения распространяется проверяемое или непроверяемое выполнение. При этом битовые операции и операции сдвига никогда не вызывают переполнения.
9. Приоритет и ассоциативность операторов
Способ вычисления выражения управляется правилами ассоциативности и приоритетом операторов. Большинство выражений, за исключением выражений назначения и выражений вызова метода, должны быть встроены в оператор.
10. Литералы и простые имена
Двумя наиболее простыми типами выражений являются литералы и простые имена. Литерал представляет собой постоянное значение, у которого нет имени. Например, в следующем примере 5 и «Hello, world!» являются литералами:
// Литералы int i = 5; string s = "Hello, world!";
В предыдущем примере i и s являются простыми именами, которые определяют локальные переменные. При использовании таких переменных в выражениях результатом вычисления имени переменной является значение, которое в данное время хранится в расположении переменой в памяти. Это показано в следующем примере:
int num = 5; System.Console.WriteLine(num); // Выведет: 5 num = 6; System.Console.WriteLine(num); // Выведет: 6
11. Выражения вызова
В следующем примере кода вызов метода DoWork является выражением вызова:
DoWork();
При вызове метода необходимо указать имя метода в явном виде, как было показано в предыдущем примере, или в виде результата другого выражения, после чего в скобках указываются все параметры этого метода. При вызове делегата указывается имя делегата и параметры метода в скобках.
Результатом вызова метода или делегата является возвращаемое методом значение, если метод вообще возвращает значение. В качестве значений в выражениях нельзя использовать методы, возвращающие значение типа void. Выражения запросов
Аналогичные правила в общем случае относятся и к выражениям запроса.
13. Лямбда-выражения
Лямбда-выражения представляют собой «встроенные методы», у которых нет имён, но которые могут иметь входные параметры и несколько инструкций. Они активно используются в LINQ для передачи параметров методам. Лямбда-выражения компилируются в делегаты или в деревья выражений в зависимости от условий, при которых они используются.
14. Деревья выражений
Деревья выражения позволяют представлять выражения в виде структур данных. Они активно используются поставщиками LINQ для преобразования выражений запросов в код, имеющий смысл в других контекстах, например в базах данных SQL.
Дополнительные сведения о деревья выражений можно получить в разделе Деревья выражений (C# и Visual Basic) (http://msdn.microsoft.com/ru-ru/library/bb397951.aspx).
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2016-08-15; просмотров: 1489; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.147.77.51 (0.008 с.) |