Дополнительная лабораторная работа № 2



C# — Создание программ на языке C# без среды разработки

 

Как гласит заголовок этого материала, пока что, мы не будем запускать среду разработки. Но она и не нужна, ведь можно использовать даже обычный Блокнот. Данный способ полезен, когда нет нужды запускать визуальные среды разработки и код достаточно простой, но можно компилировать и массивные программы с множеством ресурсов. Также предполагается, что программист достаточно квалифицирован, ведь наличие визуализации (хотя бы подсветки) написания кода существенно облегчает процесс написания программ.

 

Цель данного материала это показать некоторые особенности языка Си-шарп и то, как может быть устроена простейшая программа.

 

Нам необходимо всего два файла: csc . exe и cscui . dll. Оба файла можно найти в папке Windows / Microsoft . NET / Framework (Рис. 1).

 

csc.exe ищем в папке v4.0.30319 (последние цифры могут изменяться в зависимости версии Framewokr’а):

 

Рис. 1. Содержимое папки Microsoft.NET/Framework

 

Нужный нам файл это: Visual C# Command Line Compiler – попросту компилятор приложений.

 

cscui.dll, называвшийся ранее cscompui.dll и работавший в паре с cscomp.dll лежит в папке v4.0.30319/1033 (Рис. 2):

 

Рис. 2. Содержимое папки v4.0.30319/1033

 

Это библиотека необходима для компилятора: Visual C# Compiler Error/Warning Messages.

 

Ссылки для загрузки этих файлов приведены в конце этого материала.

 

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

 

using System;

using System.Globalization;

 

class MainApp

{

public static void Main()

{

   Console.Title = "This is My First App!";

   //

   Console.ForegroundColor = ConsoleColor.DarkYellow;

   Console.BackgroundColor = ConsoleColor.DarkBlue;

   //

   Console.WriteLine("Hello World!\nИ по-русски можно? Конечно, привет мир!\nThis is my first application using C#!\nP.S. C# and F# FTW?\n");

   //

    Calendar MyCalendar = new GregorianCalendar();

   CultureInfo MyCulture = new CultureInfo("ru-RU");

   DateTime MyDate = new DateTime(2012, 12, 21, 18, 30, 0, 0);

   //

   Console.WriteLine("Время записанное в календаре: " + MyCalendar.ToDateTime(MyDate.Year,

             MyDate.Month,

             MyDate.Day,

             MyDate.Hour,

             MyDate.Minute, 0, 0) + "\n");

   //

   DateTime now = DateTime.Now;

   Console.WriteLine("Время запуска приложения: {0}\n", now);

   //

   Random rand = new Random();

   int a = 0, b = 0;

 

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

   {

       a = rand.Next() % 100;

       b = rand.Next() % 100;

       Console.WriteLine("a = {0}, b = {1}, больше: {2}", a, b, a > b ? 'a' : 'b');

   }

   //

 Console.ReadKey();

}

}

 

Далее сохраним как Test.csБлокноте: Сохранить как… -> Тип файла: Все файлы). Такое расширение (.cs) имеют файлы кода для программ на Си-шарп (Рис. 3):

 

Рис. 3. Создание файла для компиляции

 

После этого, создаём в этой же папке ещё один текстовый файл, внутри вписываем:

 

csc.exe Test.cs

pause

 

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

 

Рис. 4. Создание командного файла

 

ПРИМЕЧАНИЕ: Мы можем и не копировать эти файлы (зачем делать лишнюю работу?), а воспользоваться возможностями .bat файлов и запустить компилятор прямо из той же папки, где он находится (но для этого его нужно всё равно найти), поместив затем откомпилированную им программу туда, куда нам нужно.

 

Способ № 1: модифицируем Compile.bat:

 

C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe Test.cs

pause

 

В итоге, скомпилируется программа Test.exe в той же папке, где находится файл Test.cs (Compile.bat запускаем из этой же папки, где лежит наш код).

 

Способ № 2: модифицируем Compile.bat:

 

C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /out:D:\VS\Test.exe D:\VS\Test.cs

pause

 

Здесь, параметр csc.exe /out:<file> указывает, куда именно записать скомпилированную программу и какое дать ей имя и расширение. Второй параметр указывает место, где хранится наш Test.cs. Этот способ предпочтительнее, так как не имеет значения, где лежит Compile.bat, где находится файл с исходным кодом и куда компилировать код. Единственное, чего необходимо избегать, это написания командных файлов в Блокноте с русскими символами в пути или названиях (предпочтительнее для этого использовать другой текстовый редактор, например: Bred 3).

 

Способ № 3: также мы можем воспользоваться стандартной командной строкой (Рис. 5) Visual Studio (Пуск -> Все программы -> Microsoft Visual Studio 2010 -> Visual Studio Tools -> Командная строка Visual Studio (2010)):

 

Рис. 5. Открываем командную строку через меню Пуск

 

В общем случае, путь прописываем как во втором способе (Рис. 6):

 

Рис. 6. Компиляция при помощи командной строки Visual Studio (2010), русские символы допускаются

Всё. Запускаем Compile.bat. Видим следующее (в окне командной строки):

Рис. 7. Компиляция программы… Успешно!

В нашей папке появился новый файл Test.exe. Собственно это и есть наша программа, скомпилированная только что без использования какой-либо среды программирования. Это удобно лишь в том случае, если под рукой нет среды разработки. Результат работы программы представлен на рисунке ниже:

Рис. 8. Рабочая программа (консольное приложение)

Теперь немного поясним код (ключевые слова подсвечены синим):

using System;

Конструкция выше — объявление использования пространства имён. В данном случае использовано системное пространство имён: System (но можно использовать и своё). Тоесть используя using, мы обращаемся к имени. В System содержится набор основных классов, и мы здесь создаём свой класс. А вот using — это зарезервированное слово в языке Cи-шарп. Что же это?

 

Директива using используется в двух случаях:

 

· разрешает использование типов в пространстве имён, поэтому уточнение использования типа в этом пространстве имён не требуется: using System.Text;

· позволяет создавать псевдонимы пространства имен или типа. Это называется директива using alias: using Project = PC.MyCompany.Project;

 

Ключевое слово using также используется для создания операторов using, которые обеспечивают правильную обработку объектов IDisposable, например файлов и шрифтов.

 

Как видим, также как и в C и C++ язык унаследовал символ «;» как символ разделения операторов, однако можно писать код и без этого разделителя (частично).

 

Вернёмся к нашему коду:

 

class MainApp {

 

В Visual C#, весь код должен содержаться в методах класса. Таким образом, к началу точки входа (в данном случае: в программу), необходимо сначала создать класс. Имя класса, здесь не имеет значения. Далее, указывается точка входа:

 

public static void Main() {

 

Компилятор требует, что-то, что можно назвать Main(). Точка входа должна быть маркирована как public, так и static. Кроме того, точка входа не имеет аргументов и ничего не возвращает (но это как в и C++ зависит от сложности программ, например: static void Main(string[] args)). Конструкция Main () должна начинаться с заглавной буквы, но само слово – не зарезервировано (не подсвечено синим в среде Visual Studio):

 

   Console.Title = "This is My First App!";

   //

   Console.ForegroundColor = ConsoleColor.DarkYellow;

   Console.BackgroundColor = ConsoleColor.DarkBlue;

   //

   Console.WriteLine("Hello World!\nИ по-руcски можно? Конечно, привет мир!\nThis is my first application using C#!\nP.S. C# and F# FTW?\n");

   //

 

Здесь всё просто. Двойной правый слеш — комментарии (зелёным). Дальше идут функции реализующие работу с консольным приложением. А именно класс System . Console предоставляющий стандартные потоки (входной и выходной, а также сообщения об ошибках) консольным приложениям. Первая строчка отвечает за заголовок окна консольного приложения (Console . Title), вторая за фон под текстом, а третья за цвет букв. Четвёртая же выводит строку в скобках без кавычек. \ n определяется как перевод курсора на следующую строку. Если System — это пространство имён, Console — класс, определённый в этом пространстве, то метод WriteLine — это метод определённый в этом классе (метод аналогичен процедуре, функции или подпрограмме).

 

Идём дальше по коду:

 

   Calendar MyCalendar = new GregorianCalendar();

   CultureInfo MyCulture = new CultureInfo("ru-RU");

   DateTime MyDate = new DateTime(2012, 12, 21, 18, 30, 0, 0);

   //

   Console.WriteLine("Время записанное в календаре: " + MyCalendar.ToDateTime(MyDate.Year,

             MyDate.Month,

             MyDate.Day,

             MyDate.Hour,

             MyDate.Minute, 0, 0) + "\n");

   //

 

Для двух верхних строчек следующего куска кода, нам понадобилось расширить пространство имён, используемого при компиляции строчкой, в противном случае мы не смогли бы получить доступ определённым зарезервированным словам:

 

using System.Globalization;

 

В самом же коде мы видим объявление объектов класса Calendar (первая строка – создаётся экземпляр MyCalendar с параметрами грегорианского календаря). Дальше объявляется класс CultureInfo. Он служит для предоставления сведений об определенном языке и региональных параметрах (которые в совокупности называются «языковым стандартом» для разработки неуправляемого программного кода). В этих сведениях содержатся имена языков и региональных параметров, система языка, используемый календарь и форматы дат, а также разделители строк. Дальше идёт DataTime с новым экземпляром MyDate которому ставится в соответствие фиксированная дата. И наконец, мы выводим всё на экран консоли в формате грегорианского календаря и региональными параметрами под ru - RU.

 

   DateTime now = DateTime.Now;

   Console.WriteLine("Время запуска приложения: {0}\n", now);

   //

   Random rand = new Random();

     int a = 0, b = 0;

 

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

   {

       a = rand.Next() % 100;

       b = rand.Next() % 100;

       Console.WriteLine("a = {0}, b = {1}, больше: {2}", a, b, a > b ? 'a' : 'b');

   }

   //

 

В первой строчке создаём экземпляр класса DateTimenow хранящий текущее время. И выводим на экран вместо символов {0}. Далее по коды, мы создаём генератор случайных чисел (rand), объявляем переменные типа int и загоняем всё это в цикл, основанный на int i. Цикл проводит 5 итераций. За каждую итерацию происходит генерация числа и операция % над этим числом: оператор модуля ( % ) вычисляет остаток после деления первого операнда на второй. Все числовые типы имеют предопределённые операторы модуля. И в этой же итерации выводится строка: вместо {0} и {1} подставляются a и b, а вместо {2} результат их сравнения (сравниваются остатки от деления).

 

Модифицируем приложение и посмотрим, что именно генерирует Random:

 

Рис. 9. Операция % не проведена над числами сгенерированными в Random

 

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

 

Во-первых, Си-шарп позволяет писать код свободно, но каждый оператор должен заканчивать точкой с запятой*:

 

public static void Main() {

   Console.Title =

        "This is My First App!"

        ;//

   Console.ForegroundColor = ConsoleColor.DarkYellow;Console.BackgroundColor = ConsoleColor.DarkBlue;

//

 

Также в куске кода выше, показано, что можно написать код приложения даже в одну строчку.

 

Во-вторых, Си-шарп чувствителен к регистру. А это значит что ConsolE, Static и Public могут вызвать ошибки. Также важно понимать, что это касается и переменных и операторов.

 

ПРИМЕЧАНИЕ (*): Однако, не всегда точка с запятой обязана быть. Например, конструкция без точек с запятой ниже, выдаст сообщение с трёмя кнопками (Рис. 10):

 

class MainApp

{

public static void Main()

{

   while (System.Windows.Forms.MessageBox.Show("Hello World without ';'! Привет мир без точек с запятой!", "This is My First Message Box!", System.Windows.Forms.MessageBoxButtons.YesNoCancel) != System.Windows.Forms.DialogResult.Yes)

   { } // До тех пор, пока не будет нажата кнопка «Да», окно не закроется

  }

}

 

Рис. 10. Результат работы кода без точек с запятой (нужно нажать «Да»)

 

Получившуюся программу (Test . exe), собранную из кусков кода приведённых в этом материале, можно загрузить по ссылке в конце этого материала (сслыка доступна в программном продукте).


Дата добавления: 2019-09-13; просмотров: 157; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!