Первое знакомство

Для написания программ на С# годится любой текстовый редактор, например стандартный Блокнот. Откройте блокнот и напишите следующее

// Файл project01.cs// Первая консольная программаclass ConsoleProgram {     public static void Main()     {         System.Console.WriteLine("Мяу, куда подевалась мышь?");    }     } 

Файлы исходного кода С# имеют расширение .cs («с sharp»). Сохраните файл с написанным текстом как project01.cs. Вы написали код для самой простой консольной программы. Но это еще не сама программа. Для создания программы используется так называемый компилятор.

Компилятор

Компилятор С#, который служит для создания исполняемых файлов EXE, называется csc.exe. Чтобы получить исполняемый файл, скомпилируйте файл project01.cs такой командной строкой:

csc project01.cs

Компилятор создаст файл project01.exe, который можно запускать из командной строки.

Флаги компиляции компилятора командной строки C#

На самом деле компилятор имеет несколько флагов, позволяющих создавать различные типы файлов

/doc
Комментарии из исходника будут записаны в файл в формате XML
/out
Указывается имя создаваемого двоичного файла. Если параметр опущен, то имя будет таким же, как у файла с исходным кодом (с расширением .cs)
/target:exe
Тип создаваемого файла - консольное приложение. Принят по умолчанию, поэтому можно не указывать
/target:library
Создание файла в виде библиотеки DLL с содержанием манифеста
/target:module
Создание DLL без манифеста.
/target:winexe
Стандартное оконное приложение

При компиляции флаг /target ставится до указания имени файла

csc /target:exe cats.cs

Параметр /target можно сократить до /t

Ссылки на внешние сборки

Бывает так, что создаваемое приложение использует типы, которые находятся во внешних, совершенно отдельных сборках С#. В нашем примере используемый класс System.Console былрасположен в библиотеке базовых типов mscorlib.dll, к которой компилятор обращается автоматически. Однако иногда нужные нам классы расположены в других сборках. Ситуацию, которая при этом возникает, лучше продемонстрироватьна примере. Предположим, что наше приложение TestApp не только выводит строки на системную консоль, но и генерирует графическое окно сообщения.

Листинг файла TestApp.cs

using System.Windows.Forms; class TestApp{	public static void Main()	{		System.Console.WriteLine("Кошкин дом");   		//Добавим новую строчку		MessageBox.Show("Мяу");	}}

Обратите внимание, что теперь в коде приложения мы обращаемся к классу в пространстве имен System.Windows.Forms. Чтобы компилятор смог обнаружить класс MessageBox, нам потребуется явно указать внешнюю сборку System.Windows.Forms.dllв командной строке. Для указания внешних сборок используется параметр /reference:имя_внешней_сборки (/reference можно сократить до /r). В нашем случае командная строка компилятора должна выглядеть так:

csc /r:System.Windows.Forms.dll TestApp.cs

Компиляция нескольких исходных файлов

При создании всех предыдущих вариантов нашего приложения использовался единственный исходный файл. Однако бывает ситуация, когда исходный код распределен по нескольким файлам. Давайте создадим такую ситуацию сами. Создадим дополнительный исходный файл HelloMsg.cs с классом HelloMessage

Пример файла HelloMsg.cs

using System;using System.Windows.Forms;class HelloMessage{	public void Speak()	{		MessageBox.Show("Мяу");	}}

И изменим предыдущий файл

using System.Windows.Forms; class TestApp{	public static void Main()	{		System.Console.WriteLine("Кошкин дом");   		//Убираем строку		//MessageBox.Show("Мяу");		//Добавляем новые строчки			HelloMessage h = new HelloMessage();		h.Speak();	}}

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

csc /r:System.Windows.Forms.dll TestApp.cs hellomsg.cs

Однако есть и еще один способ компилировать приложение из нескольких исходников. Компилятор csc.exe поддерживает символ подстановки (*). При использовании этого символа мы сообщаем компилятору, что ему необходимо включить в приложение все файлы с указанным нами расширением, которые находятся в текущем каталоге:

csc /r:System.Windows.Forms.dll /out:TestApp.exe *.cs

Поскольку компилятор уже не сможет воспользоваться именем приложения по умолчанию, при использовании подстановочного символа (*) нам придется обязательно использовать параметр /out.

А что делать, если в нашем приложении используются классы сразу из несколькихвнешних сборок? Просто перечислить все эти сборки через точку с запятой, вот так:

csc /r:System.Windows.Forms.dll;System.Drawing.dll *.cs

В нашем приложении сборка System.Drawing.dll не нужна, мы добавили ее лишь для примера. Как вы, наверное, догадываетесь, в CSC предусмотрено множество других параметров командной строки. Для знакомства с ними мы рекомендуем использовать MSDN.

Полученный EXE-файл — 3 или 4 Кб в зависимости от того, помещает ли в него компилятор отладочную информацию.Исполняемый файл состоит из операторов MSIL (Microsoft Intermediate Language). При запуске программы среда CLR (Common Language Runtime) компилирует промежуточный язык в«родной» машинный код компьютера и подключает соответствующие DLL .NET. Например, если вы используете компьютер архитектуры Intel, то исполняющая среда будет генерировать 32-битный машинный код Intel x86. Посмотреть на MSIL можно, запустив дизассемблер Intermediate Language Disassembler (ildasm.exe):

ildasm project01.exe

C# чувствителен к регистру. Точка входа в программу на С# — функция Main (пишется с заглавной буквы). Пустые скобки показывают, что Main не имеет параметров, а ключевое слово void — что ОНЕ не возвращает значения. Ключевое слово public неявляется здесь строго необходимым; программа будет компилироваться и запускаться и без него.Main располагается внутри определения класса. Класс — основной структурный и организационный элемент объектно-ориентированных языков программирования, подобных С#. Проще всего сказать, что класс — совокупность связан-ных между собой кода и данных. У файла будет такое же имя, как и у класса, но с расширением .cs. Это соглашениеоб именах не является необходимым в С#; эта концепция появилась в Java и достаточно удобна.

System.ConsoleWriteLine напоминает вызов функции, и это, действительно, так.Данная функция принимает один параметр — текстовую строку — и показывает ее на консоли, в окне командной строки. Если вы скомпилируете и запустите программу, она покажет строку:

Мяу, куда подевалась мышь?
и завершит работу.

Длинное имя функции System.Console.WriteLine состоит из таких частей:• System — пространство имен;• Console — класс, определенный в этом пространстве имен;• WriteLine — метод, определенный в этом классе; метод — то же самое, что ифункция, процедура или подпрограмма.

Использование пространств имен позволяет уменьшить объем ввода с клавиатуры. Для этого предназначено ключевое слово using. Пространство имен указывается один раз в операторе using, затем это пространство имен можно не вводить при обрашении к егоклассам. Вот альтернативный вариант программы:

// Использование пространства именusing System;class ConsoleProgram {     public static void Main()     {         Console.WriteLine("Мяу, куда подевалась мышь?");    }     } 

Можно использовать псевдонимы с ключевым словом using:using Tom = Cat.SharpClaws;using Pussy = Kitten.GreenEyes;Теперь к этим двум классам можно обращаться как:

Tom.BirthdayPussy.Birthday

Продолжение следует...

Реклама