Class MyMainClass

{

// Ниже: тело главного класса

static <Имя типа> AuxMethod(<Список параметров>)

{ /* Тело вспомогательного метода */ }

static<Имя типа>Main(string[] args)

{ /* Тело главного метода */ }

}

}

Большинство конструкций, из которых построена схема, имеет общий вид <Заголовок конструкции><Тело конструкции>. Такой вид конструкции далее, для удобства, будет именоваться стандартным. Лишь конструкция delegate нестандартна, она состоит из заголовка без тела. Тело конструкции представляет собой пару фигурных скобок, в которую заключены подчиненные (внутренние) конструкции.

Каждая из таких конструкций, как пространство имен (namespace), класс (class), структура (struct), интерфейс (interface), делегат (delegate), перечисление (enum), вспомогательный метод (static <Имя типа>) может быть представлена в одном или нескольких экземплярах, либо вовсе отсутствовать.

Но заголовок и тело главного метода static<Имя типа>Main(string[] args)обязательно должны присутствовать. Заголовок и тело класса, объемлющего метод Main, также обязательно должны присутствовать. <Имя типа> главного метода может быть int либо void. В первом случае главный метод должен возвращать целочисленное значение, а значит, в его теле должен присутствовать оператор перехода return <Выражение>.

Предложение using System присутствует всегда, оно означает ссылку на пространство имен, используемое, как правило, в каждом приложении, формируемом на языке C#.

Дополнительные предложения using <Имя пространства имён> предоставляет доступ к дополнительным именам, предусмотренным либо создателями Visual Studio, либо самим программистом.

Язык программирования Delphi предоставляет программисту объявить в разделе описания типов свой пользовательский тип, равноценный стандартному, но с другим именем: type MyInt = integer. В языке C# такую же возможность обеспечивает предложение using MyInt = System.Int32.

Известно, что все хорошие программисты используют в своих текстах комментарии. Комментарии в C# бывают однострочными и многострочными. Начало однострочного комментария есть пара символов "//" (косая черта, слэш), концом является конец строки. Началом и концом многострочного комментария служит, соответственно, пара символов "/*" и пара символов "*/".

Пример простейшей программы на языке C#

Предположим, файл программы наделен именем "p01.cs" и имеет следующий вид:

using System;

namespace MyNamespace

{

class MyMainClass

{

static void Main(string[] args)

{

int n;

n = args.Length;

System.Console.WriteLine("Количество параметров = {0}", n);

for (int i = 0; i < n; i++)

{

System.Console.WriteLine("Номер параметра = {0} Параметр = {1}",

i + 1, args[i]);

}

System.Console.ReadKey();

}

}

}

После компиляции и сборки, в папке, содержащей файл c исходным кодом "p01.cs", появится исполняемый файл "p01.exe". Если этот файл запускается на исполнение с командной строки, а не из среды программирования, в командной строке могут присутствовать параметры. Например:

<Путь к EXE-файлу>p01.exe 1 22 333 4444 55555

Параметры запуска могут быть распознаны и использованы программой. Разделитель элементов списка параметров – пробел. Если пробел заменён группой из нескольких подряд идущих пробелов, эта группа воспринимается как один пробел.

Результат запуска будет выглядеть так:

Количество параметров = 5

Номер параметра = 1 Параметр = 1

Номер параметра = 2 Параметр = 22

Номер параметра = 3 Параметр = 333

Номер параметра = 4 Параметр = 4444

Номер параметра = 5 Параметр = 55555

Несколько необходимых пояснений к тексту программы.

Стоящие в заголовках имена MyNamespace и MyMainClass могут быть изменены. Имя главного метода Main изменять нельзя, данное имя означает, что при запуске программы управление будет передано именно этому методу.

Стандартный класс Console, объявленный в пространстве имён System, имеет ряд статических методов, в частности, методы Write(…) (вывести данные на экран), WriteLine(…) (вывести данные на экран, затем перевести курсор на новую строку), ReadKey() (остановить исполнение программы до нажатия пользователем любой клавиши).

Параметр главного метода args представляет собой массив строковых значений, поскольку объявлен под типом string[]. Элементы этого массива содержат параметры программы, с которыми был запущен её EXE–файл. Массив, как и любая другая переменная в C#, является объектом, одним из методов которого имеет имя Length – длина (количество элементов) массива.

Теперь, после разбора простейшей работающей программы есть смысл подробнее остановиться на её компонентах.

Вывод и ввод

Стандартный оператор бесформатного вывода данных на экран имеет вид System.Console.Write(<Выражение>). Если выводимое выражение не является строковым, оно будет преобразовано к строковому (к набору символов). Например, если выражение есть вещественное число, оно будет выведено с 14 значащими десятичными цифрами в форме с плавающей точкой либо, если возможно, с 15 значащими цифрами в форме с фиксированной точкой.

Оператор вывода данных по формату System.Console.Write(<Формат вывода>, <Список вывода>) состоит из строки, задающей формат вывода, и списка вывода, который может быть пустым, или состоять из выражений, отделённых друг от друга запятыми. Элементы списка вывода нумеруются, начиная с нуля. Строка формата может содержать конструкции {0}, {1}, … , означающие место для вывода элемента списка вывода номер 0, номер 1, … . Для каждого выводимого элемента может быть назначен специальный формат. Например, формат {0:D} означает, что число должно быть выведено, как целое десятичное, {0:D4} – под целое число отводится 4 позиции, {0:X5} – 5 позиций отводится под шестнадцатеричную форму целого числа, {0:F7} – вещественное число выводится в форме с фиксированной точкой, после десятичной точки 7 позиций отводится под дробную часть числа, {0:E8} – вещественное число выводится в форме с плавающей точкой, после десятичной точки 8 позиций отводится под дробную часть мантиссы числа, {0:N3} – любое число выводится с 3 значащими цифрами после десятичной точки, триады целой части числа отделяются друг от друга, {0:G6} – любое число выводится с 6 значащими цифрами, форма вывода (с фиксированной точкой, с плавающей точкой) выбирается в зависимости от величины числа.

Ввод одного символа с пульта производится с помощью обращения к стандартному методу System.Console.ReadKey(). Этот метод возвращает значение типа структуры System.ConsoleKeyInfo. Если оператор ограничивается вызовом метода, возвращаемое им значение теряется. Если требуется использовать возвращаемое значение, можно обратиться к одному из полей структуры. Например, оператор char c=System.Console.ReadKey().KeyChar с помощью поля " KeyChar " занесёт в переменную "с" код нажатой клавиши в кодировке Unicode. В распоряжении пользователя и другие поля структуры, в частности, указывающие, были ли одновременно с клавишей консоли нажаты управляющие клавиши SHIFT, ALT или CTRL.

Ввод строки с пульта производится с помощью обращения к стандартному методу System.Console.ReadLine(). Если строка, возвращаемая методом, подразумевает данные, иные, чем строковые, их следует преобразовать к нужному типу, например, так: double x=System.Double.Parse(System.Console.ReadLine()). Если в строке собрано несколько данных, отделённых пользовательским знаком–разделителем, потребуются дополнительны методы класса string.