Сдвиг
| x << y
| Поразрядный сдвиг влево
|
x >> y
| Поразрядный сдвиг вправо
|
Отношение и проверка типа
| x < y
| Меньше
|
x > y
| Больше
|
x <= y
| Меньше или равно
|
x >= y
| Больше или равно
|
x is T
| Возвращает true, если x имеет тип T; в противном случае возвращает false
|
x as T
| Возвращает значение x, типизированное как T, или null, если x имеет тип, отличный от T
|
Равенство
| x == y
| Равно
|
x!= y
| Не равно
|
Логическое И
| x & y
| Целое побитовое И, логическое И
|
Исключающее ИЛИ
| x ^ y
| Целое побитовое исключающее ИЛИ, логическое исключающее ИЛИ
|
Логическое ИЛИ
| x | y
| Целое побитовое ИЛИ, логическое ИЛИ
|
Условное И
| x && y
| y вычисляется только в том случае, если x имеет значение true
|
Условное ИЛИ
| x || y
| y вычисляется только в том случае, если x имеет значение false
|
Объединение с null
| X?? y
| Если x имеет значение null, вычисляется y; в противном случае вычисляется x
|
Условный
| x? y: z
| Если x имеет значение true, вычисляется y; если x имеет значение false, вычисляется z
|
Присваивание или анонимная функция
| x = y
| Присваивание
|
x op= y
| Составное присваивание; поддерживаются следующие операторы:
*= /= %= += -= <<= >>= &= ^= |=
|
(T x) => y
| Анонимная функция (лямбда-выражение)
|
1.5 Операторы языка;
Действия программы выражаются с помощью операторов;. В C# поддерживается несколько различных типов операторов, некоторые из которых определяются как внедренные операторы.
Блок; позволяет записать несколько операторов языка в контексте, обычно допускающем использование только одного оператора. Блок состоит из нескольких операторов, записанных между разделителями — { и }.
Операторы объявления; используются для объявления локальных переменных и констант.
Операторы выражений используются для вычисления выражений. Как операторы могут использоваться следующие выражения: вызовы методов, выделение объектов с помощью оператора new, операторы присваивания «=» и составного присваивания, операции приращения и уменьшения с помощью операторов «++» и «--».
Операторы выбора; используются для выполнения одного из нескольких возможных операторов на основании значения какого-либо выражения. В этой группе представлены операторы if и switch.
Операторы итераций; используются для повторяющегося выполнения внедренного оператора. В этой группе представлены операторы while, do, for и foreach.
Операторы перехода; используются для передачи управления. В этой группе представлены операторы break, continue, goto, throw, return и yield.
Оператор try...catch используется для перехвата исключений, происходящих во время выполнения блока. Оператор try...finally используется для задания кода финализации, который выполняется всегда (независимо от того, возникло или нет исключение).
Операторы checked и unchecked используются для управления контекстом контроля переполненияв арифметических операциях и преобразованиях целых типов.
Оператор lock используется для получения блокировки взаимного исключения для заданного объекта, выполнения оператора и последующего снятия блокировки.
Оператор using используется для получения ресурса, выполнения оператора и последующего удаления ресурса.
В следующей таблице представлены операторы C# и примеры их использования.
Оператор
| Пример
|
Объявление локальной переменной
| static void Main() { int a; int b = 2, c = 3; a = 1; Console.WriteLine(a + b + c); }
|
Объявление локальной константы
| static void Main() { const float pi = 3.1415927f; const int r = 25; Console.WriteLine(pi * r * r); }
|
Оператор выражения
| static void Main() { int i; i = 123; // Expression statement Console.WriteLine(i); // Expression statement i++; // Expression statement Console.WriteLine(i); // Expression statement }
|
Оператор if
| static void Main(string[] args) { if (args.Length == 0) { Console.WriteLine("No arguments"); } else { Console.WriteLine("One or more arguments"); } }
|
Оператор switch
| static void Main(string[] args) { int n = args.Length; switch (n) { case 0: Console.WriteLine("No arguments"); break; case 1: Console.WriteLine("One argument"); break; default: Console.WriteLine("{0} arguments", n); break; } } }
|
Оператор while
| static void Main(string[] args) { int i = 0; while (i < args.Length) { Console.WriteLine(args[i]); i++; } }
|
Оператор do
| static void Main() { string s; do { s = Console.ReadLine(); if (s!= null) Console.WriteLine(s); } while (s!= null); }
|
Оператор for
| static void Main(string[] args) { for (int i = 0; i < args.Length; i++) { Console.WriteLine(args[i]); } }
|
Оператор foreach
| static void Main(string[] args) { foreach (string s in args) { Console.WriteLine(s); } }
|
Оператор break
| static void Main() { while (true) { string s = Console.ReadLine(); if (s == null) break; Console.WriteLine(s); } }
|
Оператор continue
| static void Main(string[] args) { for (int i = 0; i < args.Length; i++) { if (args[i].StartsWith("/")) continue; Console.WriteLine(args[i]); } }
|
Оператор goto
| static void Main(string[] args) { int i = 0; goto check; loop: Console.WriteLine(args[i++]); check: if (i < args.Length) goto loop; }
|
Оператор return
| static int Add(int a, int b) { return a + b; }
static void Main() { Console.WriteLine(Add(1, 2)); return; }
|
Оператор yield
| static IEnumerable<int> Range(int from, int to) { for (int i = from; i < to; i++) { yield return i; } yield break; }
static void Main() { foreach (int x in Range(-10,10)) { Console.WriteLine(x); } }
|
Операторы throw и try
| static double Divide(double x, double y) { if (y == 0) throw new DivideByZeroException(); return x / y; }
static void Main(string[] args) { try { if (args.Length!= 2) { throw new Exception("Two numbers required"); } double x = double.Parse(args[0]); double y = double.Parse(args[1]); Console.WriteLine(Divide(x, y)); } catch (Exception e) { Console.WriteLine(e.Message); } finally { Console.WriteLine(“Good bye!”); } }
|
Операторы checked и unchecked
| static void Main() { int i = int.MaxValue; checked { Console.WriteLine(i + 1); // Exception } unchecked { Console.WriteLine(i + 1); // Overflow } }
|
Оператор lock
| class Account { decimal balance;
public void Withdraw(decimal amount) { lock (this) { if (amount > balance) { throw new Exception("Insufficient funds"); } balance -= amount; } } }
|
Оператор using
| static void Main() { using (TextWriter w = File.CreateText("test.txt")) { w.WriteLine("Line one"); w.WriteLine("Line two"); w.WriteLine("Line three"); } }
|
1.6 Классы и объекты;
В C# классы; представляют собой фундаментальные типы. Класс — это структура данных, объединяющая состояние (поля) и действия (методы и другие функции-члены). Класс предоставляет определения для динамически создаваемых экземпляров класса (также называются объектами). Классы поддерживают механизмы наследования и полиморфизма, которые позволяют создавать производные классы, расширяющие функциональные возможности базового класса.
Новые классы создаются с помощью объявлений класса. Объявление класса начинается с заголовка, в котором задаются атрибуты и модификаторы класса, имя класса, базовый класс (если есть), а также интерфейсы, реализуемые классом. За заголовком следует тело класса, которое содержит перечень объявлений членов, записанных между разделителями — { и }.
Ниже приведено объявление простого класса Point:
public class Point
{
public int x, y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
}
Экземпляры класса создаются с помощью оператора new, который выделяет память для нового экземпляра, вызывает конструктор для инициализации экземпляра и возвращает ссылку на экземпляр. С помощью следующих операторов создаются два объекта Point, ссылки на которые сохраняются в двух переменных: