Введение в язык C#

Язык C# — это объектно-ориентированный язык, напоминающий С++ и Java. По аналогии с Java, C# не поддерживает указателей, использует встроенный механизм сборки мусора (garbage collection), что позволяет программисту не задействовать деструкторы и освобождает от необходимости отслеживать процесс выделения памяти. В языке нет глобальных переменных, множественного наследования и ряда других конструкций.

C# реализован на платформе .NET, ядро которой работает на уровне общего языка, известного под названием Common Language Subset (CLS, также называется Common Language Specification), и обеспечивает связь между всеми языками и библиотекой классов. Это означает, что C# имеет доступ ко многим средствам, которые можно реализовать на Visual Basic .NET, Visual С++ .NET и Visual J++ .NET).

Сходство концептуальных основ Java и C# очевидно. Однако C#, несомненно, не просто переопределенный вариант Visual J++. Многие конструкции Java вполне узнаются в C#. Рассмотрим каркас приложения C#:

using System; namespace MyFirstApp

class Classl {

{

// код приложения

}

}

}

Инструкция using аналогична инструкции import в Java. Она предназначена для подключения библиотеки классов. Объявление класса такое же, как в Java. Главная точка входа в приложение, — как и ранее, static void Main(). Объявление namespace определяет так называемое пространство имен — аналог объявления Package. Как и Java, C# не использует указателей. В последующем подобные аналогии будут усматриваться и в других аспектах. И вместе с тем C# является представителем новой платформы .NET. По аналогии с Java, платформа .NET содержит виртуальную машину для выполнения NET- приложений. Исходные тексты C# транслируются в промежуточный язык MSIL (Microsoft Intermediate Language), который обрабатывает виртуальная машина платформы .NET. Все это в рамках собственной реализации есть и в Java. Вместе с виртуальной машиной платформа .NET содержит библиотеки классов, определяющие свои пространства имен. Например,

W HWffiP8ffii? J^Соответствует AWT (Java);

□      ASP.NET — аналог JSP;

□      ADO.NET — аналог JDBC;

□      компоненты .NET — аналог Java Beans и ActiveX;

□      COM+ — аналог EJB (Enteiprise Java Beans);

□      службы Windows — нет аналога в Java.

Виртуальная машина .NET позволяет работать с языками Visual C# .NET, Visual С++ .NET, Visual Basic .NET, JScript .NET, Visual J++ .NET. Все эти языки используют одни и те же библиотеки и одинаково реализуют объекты. Например, класс, созданный в Visual Basic, можно объявить и использовать в C#.

Единицей приложения является проект. Проекты могут собираться в сборки.

Для работы с C# вам необходимо приобрести и инсталлировать систему Visual Studio.NET 2003. В отличие от J2SE SDK, она не поставляется бесплатно. Окно инсталлированной системы представлено нарис. 3.1.

Рис. 3.1. Окно создания проектов C#

Для создания проекта выбираем File | New | New Project.

В окне из предложенных вариантов приложений нужно выбратъ тип будущего проекта:

□      Windows Application — оконное приложение Windows;

□      Console AppUcation — консольное приложение (без окна);

□      Control Library — создание новых элементов;

□      WebForm AppUcation — создание динамических Web-страниц и др.

Начнем изучение с консольных приложений. Выберите тип проекта Console AppUcation, затем введите его имя (в поле Name) и место хранения (в поле Location), и на экране дисплея вы увидите показанное нарис. 3.1 окно.

Заметим, что файлы проектов в C# имеют расширение csproj, а файлы классов — cs.

Простейшее приложение содержит единственный класс и единственный метод Main(). Изменим содержимое метода Main() следующим образом:

static void Main(string[] args)

{

System.Console.WriteLine("Your name, please=>"); string s=System.Console.ReadLine();

System.Console.WriteLine("Hello, "+s);

System.Console.ReadLine();

}

Выполним эту программу. Выберем пункт меню Debug, затем подпункт Start.

Команда System.Console.WriteLine("Your name, please=>") выводит на консоль строку приглашения, console — это имя класса, содержащего методы для работы с консолью. Одним из таких методов является вывод строки — writeLine (). Программирование на языке C# осуществляется на основе классов. В приложении может быть несколько классов, но только в одном классе определяется функция Main о — главная точка входа в приложение. Именно эта функция получает управление первой при запуске приложения. В C#, как и в Java, имеет значение регистр букв. В начале программы указываются подключаемые пакеты (с помощью директивы using). Каждый пакет содержит описание стандартных классов. Ключевое слово namespace используется для указания пространства имен, в пределах которого действительны имена переменных и функций, используемых программистом. Определения функций и классов заключаются в фигурные скобки — {}.

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

□      short — короткое целое от —32 768 до +32 768;

□      ushort — беззнаковое целое от 0 до 65 535;

□      int — то же, что и short;

□      uint — то же, что и ushort;

□      sbyte — uc.ioc от — 127 до ~I27:

□      byte — целое от 0 до 255;

□      char — символьныйтип(например,’а’);

□      string — строковыйтип(например,"аЬс");

□      long — длинное целое;

□      uiong — беззнаковое длинное целое;

□      float — вещественное число;

□      double — вещественное число удвоенной точности от +/-5.0xl0-324 до +/-3.4xl0308.

Допускается частичное преобразование типов, например:

short x; int y=2; x= (short) у;

Для написания кодов используются операторы присваивания (=), проверки условия (if () {…} else {…}), цикла (for, foreach, while/do while), множественного выбора (switch case), переходов (break, continue, goto).

Оператор присваивания: string s=consoie.ReadLine(). Здесь строковая переменная s получает значение, вводимое с клавиатуры.

Продемонстрируем работу оператора множественного выбора на следующем фрагменте кода, предполагая наличие команды using System в начале программы.

string s=Console.ReadLine(); // Имя System можно опустить,

// т.к. соответствующий пакет подключен командой using System switch (s)

{

case "apple":

Console.WriteLine("Fruit"); break;

case "cherry":

Console.WriteLine("Fruit") ; break;

case "stone" :

Console.WriteLine("Not a fruit"); break; default :

Console.WriteLine("Think about it Yourself"); break;

}

В этом фрагменте сначала выполняется чтение строки s с клавиатуры. Оператор switch осуществляет разбор вариантов. Каждый проверяемый вариант начинается словом case, за которым следует значение переменной, соответствующее этому варианту. Каждый вариант, вообще говоря, следует завершать командой break для выхода за пределы конструкции switch. Если оператор break не указан, то выполняется переход для проверки следующего варианта case и т. д. Вариант default соответствует значениям проверяемой переменной или выражения, не указанным в вариантах case. Реализуем тот же фрагмент с помощью оператора if:

string s=Console.ReadLine(); if (s=="apple")

Console.WriteLine("Fruit") ;

else

if (s= "cherry")

Console.WriteLine("Fruit") ;

else

if (s= "stone" )

Console.WriteLine("Not а fruit"); else

Console.WriteLine("Think about it Yourself");

}

Оператор if сначала проверяет условие, указанное в круглых скобках, например, if (s== "stone") {…}.

Если условие истинно, выполняется блок комавд, записанных в фигурных скобках. Если в блоке только одна команда, то фигурные скобки указывать не обязательно. В случае ложности условия осуществляется выполнение блока комавд, записанных непосредственно за ключевым словом else.

Обратимся к циклам. Приведем фрагмент кода, который осуществляет ввод строк до тех пор, пока не будет введена строка

"exit".

string s; do {

string s=Console.ReadLine(); if (s=="apple")

Console.WriteLine("Fruit") ;

else

if (s== "cherry")

Console.WriteLine("Fruit");

else

if (s== "stone" )

Console.WriteLine("Not а fruit");

else

Console.WriteLine("Think about it Yourself");

}

while (!(s="exit");

Выполняется тело цикла do до тех пор, пока истинно выражение, записанное в условии while. Символ "!" соответствует логическому оператору отрицания. Два знака равенства используются для проверки на совпадение. Другая форма цикла while имеет следующий вид: while (условие)

{

тело цикла

}

В этом варианте цикл выполняется до тех пор, пока истинно условие (цикл может не выполниться ни разу, если при входе в него условие цикла ложно).

Цикл for позволяет использовать переменную цикла и ограничивать число итераций фиксированным значением, например:

for (int i=l; Math.sin(i)<0.5; i++)

{

Console.WriteLine(""+Math.sin(i));

}

Приведенный здесь цикл выполняется, начиная со значения i=i, до тех пор, пока sin(i)<o.5. После завершения очередной итерации цикла и вывода значения синуса i на консоль переменная цикла i увеличивается на 1 с помощью оператора i++. В записи условий цикла for указывают: начальное значение переменной цикла (int i=i), условие выполнения очередной итерации и оператор, выполняющийся по завершении очередной итерации (i++). Все варианты записи циклов взаимозаменяемы. Для преждевременного выхода из цикла используется команда break. Для преждевременного перехода к очередной итерации используют команду continue.

Приведем пример:

for (;;) // Бесконечный цикл без каких-либо условий {

string s=Console.ReadLine(); // Читаем строку с клавиатуры if (s=="apple") // Выход из цикла по вводу "apple" break; else

continue; // Продолжение итераций

}

Цикл foreach будет рассмотрен далее. Команду goto мы по возможности не используем, солидаризуясь с разработчиками Java. Сравнивая коды, написанные на C# и Java, видим, что C# "более либерален" в отношении использования исключительных ситуаций и охраны (конструкции try … catch). Читателю снова рекомендуем прочитать разд. "Обработка исключительных ситуаций" главы 1. Здесь ограничимся следующим типичным примером. Запишем код, в котором выполним деление на 0, но при этом перехватим исключительную ситуацию так, как показано в этом примере: try

{

int z=0; float d= 15/z;

}

catch (System.Exception e)

{

Console.WriteLine("Error in Your program");

}

Как и следовало ожидать, получим сообщение: Error in Your program. При возникновении ошибки внутри блока try проверяется, какой тип ошибок перехватывает блок catch. В нашем случае блок catch перехватывает ошибки типа Sys- tem.Exception. Этот тип ошибок является наиболее общим. Если тип ошибок, указанный в блоке catch, не соответствует типу возникшей ошибки, программа завершается аварийно. Для одного блока try можно указать несколько различных блоков catch, перехватывающих разные типы ошибок. После обработки блока catch программа продолжает выполняться с оператора, непосредственно следующего за этим блоком catch. В блоке catch указывается объектная переменная e класса System.Exception. Эта переменная имеет несколько полезных свойств, которые доступны в приложении:

□      Message — содержит текст ошибки;

□      Targetsite — содержит имя метода, вызвавшего ошибку;

□      Source — содержит имя приложения, вызвавшего ошибку, и др.

Наконец, можно искусственно создать ошибочную ситуацию, например, таким образом:

try

{

ArithmeticException el=new ArithmeticException(); // Создаем

// исключение

throw el; // Вызываем исключение искусственно

}

catch(System.Exception e) // Перехватываем исключение

Console.WriteLine(e.Message);

Console.ReadLine();

Исключение вызывается командой throw.

Более подробное знакомство с вопросом об исключительных ситуациях и их обработке можно получить из [9].

Источник: Герман О. B., Герман Ю. О., Программирование на Java и C# для студента. — СПб.: БХВ-Петербург, 2005. — 512 c.: ил.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100