| Не обнаружил проекты, которые используются в примерах в лекции, также не увидел список задач. | 
Операторы языка C#
Операторы языка C#
Состав операторов языка C#, их синтаксис и семантика унаследованы от языка С++. Как и положено, потомок частично дополнил состав, переопределил синтаксис и семантику отдельных операторов, постарался улучшить характеристики языка во благо программиста. Посмотрим, насколько это удалось языку C#.
Оператор присваивания
Как в языке С++, так и в C# присваивание формально считается операцией. Вместе с тем запись:
X = expr;
следует считать настоящим оператором присваивания, так же, как и одновременное присваивание со списком переменных в левой части:
X1 = X2 = ... = Xk = expr;
В отличие от языка C++ появление присваивания в выражениях C# хотя и допустимо, но практически не встречается. Например, запись:
if(x = expr)...
часто используемая в С++, в языке C# в большинстве случаев будет воспринята как ошибка еще на этапе компиляции.
В предыдущих лекциях семантика присваивания разбиралась достаточно подробно, поэтому сейчас я на этом останавливаться не буду.
Блок или составной оператор
С помощью фигурных скобок несколько операторов языка (возможно, перемежаемых объявлениями) можно объединить в единую синтаксическую конструкцию, называемую блоком или составным оператором:
{
	оператор_1
	...
	оператор_N
}Синтаксически блок воспринимается как единичный оператор и может использоваться всюду в конструкциях, где синтаксис требует одного оператора. Тело цикла, ветви оператора if, как правило, представляются блоком. Приведу достаточно формальный и слегка запутанный пример, где тело процедуры представлено блоком, в котором есть встроенные блоки, задающие тело оператора цикла for и тела ветвей оператора if:
/// <summary>
/// демонстрация блоков (составных операторов)
/// </summary>
public void Block()
{			
	int limit = 100;
	int x = 120, y = 50;
	int sum1 =0, sum2=0;
	for (int i = 0; i< 11; i++)
	{
		int step = Math.Abs(limit -x)/10;
		if (x > limit)
			{x -= step; y += step;}
		else
			{x += step; y -= step;}
		sum1 += x; sum2 +=y;
	}
	//limit = step;	//переменная step перестала существовать
	//limit = i;	// переменная i перестала существовать
	Console.WriteLine("x= {0}, y= {1}, sum1 ={2}, sum2 = {3}",
		x,y,sum1,sum2);
}Заметьте, здесь в тело основного блока вложен блок, задающий тело цикла, в котором объявлены две локальные переменные - i и step.
В свою очередь, в тело цикла вложены блоки, связанные с ветвями then и else оператора if. Закомментированные операторы, стоящие сразу за окончанием цикла, напоминают, что соответствующие локальные переменные, определенные в блоке, перестают существовать по его завершении.
Приведенная процедура Block является методом класса Testing, который входит в проект Statements, созданный для работы с примерами этой лекции. Вот описание полей и конструктора класса Testing:
/// <summary>
/// Класс Testing - тестирующий класс. Представляет набор 
/// скалярных переменных и методов, тестирующих работу 
/// с операторами, процедурами и функциями C#.
/// </summary>
public class Testing
{
	public Testing(string name, int age)
	{
		this.age = age;
		this.name = name;
	}
	//поля класса
	public string name;
	public int age;
	
	private int period;
	private string status;
}Пустой оператор
Пустой оператор - это "пусто", завершаемое точкой с запятой. Иногда полезно рассматривать отсутствие операторов как существующий пустой оператор. Синтаксически допустимо ставить лишние точки с запятой, полагая, что вставляются пустые операторы. Например, синтаксически допустима следующая конструкция:
for (int j=1; j<5; j++)
			{;;;};Она может рассматриваться как задержка по времени, работа на холостом ходе.
 
                             
