Опубликован: 19.08.2004 | Уровень: для всех | Доступ: платный | ВУЗ: Национальный исследовательский ядерный университет «МИФИ»

Лекция 4: Основные понятия языка программирования C#

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

Одной из черт, унаследованных C# от языка программирования C, является блок операторов – последовательность операторов, разделенных символами " ; ", ограниченная фигурными скобками " { " и " } ".

Аналогом оператора блока в языках функционального программирования является функция.

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

void foo (int x) {
// блок методов
	... локальные переменные ...
		{ // вложенный блок
		 ... локальные 
			переменные ...
		}
	for (int i = 0; ...) {
		// блок структурированных 
		// операторов
		 ... локальные 
			переменные ...
	}
}

Как видно из примера, блоки объединяют (структурированные) операторы и методы. Допускается использование блоков, вложенных один в другой. Для удобочитаемости текста программы глубину вложенности блока лучше визуализировать посредством табуляции.

Рассмотрим подробнее особенности описания локальных переменных в языке программирования C# на следующем примере программы:

void foo(int a) {
	int b;
	if (...) {
		int b;
	// ошибка: переменная b уже 
	// описана в другом блоке
		int c;
	// пока описание корректно, 
	// однако ...
		int d;
		...
	} 
	else {
		int a;
	// ошибка: переменная а уже 
	// описана во внешнем блоке
		int d;
	// конфликтов с переменной d 
	// из предыдущего блока нет
	}
	for (int i=0;...){
	...
	}
	for (int i=0;...){
	...
	}
	// фрагмент корректен: нет 
	// конфликтов с переменной
	// i из предыдущего 
	// цикла
	int c;
	// ошибка: c уже описана в 
	// данном пространстве имен
}

Рассмотрим функцию foo с одним целочисленным аргументом a, которая не возвращает значения.

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

Заметим попутно, что условный оператор if...else языка C# весьма схож с подобным оператором языка SML, а оператор for является оператором цикла.

Рассмотрим более сложный пример использования пространств имен в языке программирования C#.

Пусть программный проект на языке программирования C# содержит три файла с описаниями структур данных, оформленными в виде отдельных пространств имен:

Color.cs
	namespace Util {
		public enum Color {
		...
		}
	}

Figures.cs
	namespace Util.Figures {
		public class Rect {
		...
		}
		public class Circle {
		...
		}
	}

Triangle.cs
	namespace Util.Figures {
		public class Triangle {
		...
		}
	}

В данном случае при использовании полного имени пространства имен ( Util.Figures ) возможно обойтись без конкретизации классов ( Rect ), описанных внутри этого пространства имен. Однако в случае обращения к классам вне данного пространства имен необходимо использовать полное квалификационное имя объекта ( Util.Color ):

using Util.Figures;
	class Test {
		Rect r;
		// без указания полного 
		// имени т.к. используем
		// (Util.Figures)
		Triangle t;
		Util.Color c;
		// c указанием 
		// полного имени 
	}

Проанализировав основные особенности языка программирования C#, а также исследовав структуру и принципы построения программ на этом языке, обозначим наиболее очевидные преимущества изучаемого языка программирования.

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

Кроме того, язык программирования C# призван практически реализовать компонентно-ориентированный подход к программированию, который способствует меньшей машинно-архитектурной зависимости результирующего программного кода, большей гибкости, переносимости и легкости повторного использования (фрагментов) программ.

Принципиально важным отличием от предшественников является изначальная ориентация на безопасность кода (что особенно заметно в сравнении с языками C и C++).

Унифицированная, максимально близкая по масштабу и гибкости к Common Type System, принятой в Microsoft .NET, система типизации является важным преимуществом языка C#.

Расширенная поддержка событийно-ориентированного программирования выгодно отличает язык программирования C# от целого ряда предшественников.

Язык программирования C# является "родным" для создания приложений в среде Microsoft .NET, поскольку наиболее тесно и эффективно интегрирован с ней.

Объединение лучших идей современных языков программирования (Java, C++, Visual Basic и др.) делает язык C# не просто суммой их достоинств, а языком программирования нового поколения.

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

Прежде всего, необходимо отметить то обстоятельство, что язык программирования C# имеет довольно сложный синтаксис (можно утверждать, что примерно 75% его синтаксических возможностей аналогичны языку программирования Java, 10% подобны языку программирования C++, а 5% – заимствованы из языка программирования Visual Basic). Объем действительно свежих концептуальных идей в языке C# относительно невысок (по мнению некоторых исследователей, он, составляет около 10% от общего объема конструкций языка).

Утверждение, что язык программирования C# является чисто объектным, допускает неоднозначную интерпретацию. Так, например, профессор K. Гуткнехт (K.Gutknecht) из института ETH (г. Цюрих, Швейцария) предложил альтернативную (так называемую "активную") объектную модель для разработанного им языка программирования Zonnon.

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

Пока программы, написанные на языке C#, не могут функционировать под управлением альтернативных операционных систем (ведутся работы по обеспечению совместимости с операционными системами Linux и FreeBSD семейства UNIX).

Для более подробного самостоятельного ознакомления с тематикой лекции рекомендуется следующий список источников: [ 23, 38, 53, 63, 77].