Первые 4 строки в исходном коде c ключевым словом using подключают библиотеки классов, с методами и свойствами которых мы будем с Вами работать:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
Далее объявляется пространство имен (что-то вроде собственной территории нашего проекта), в котором будет выполняться наш проект:
namespace ConsoleApplication7
{
//затем объявляется класс Programm, в котором находится точка выхода в программу – метод Main.
class Program
{
static void Main(string[] args)
{
Далее идет код самого метода. Здесь прописываются инструкции нашей программы:
//объявление строковой переменной str для хранения имени пользователя.
string str;
//метод вывода текста в консоль (текст прописывается в фигурных скобках). Метод WriteLine() принадлежит классу Console, который в свою очередь находится в пространстве имен System. Теоретически нужно было бы написать System.Console.WriteLine(), но как мы помним, в первых 4-х строках мы произвели подключение пространства имен System, поэтому далее в коде указывать на него нет необходимости.
Console.WriteLine("Как тебя зовут?");
//присваиваем переменной str значение, которое ввел пользователь.
str = Console.ReadLine( );
//с пмощью мтода WriteLineвыводим на экран строку «Привет, имя_пользователя»
Console.WriteLine("Привет "+str);
//далее программа ожидает от пользователя нажатия на любую клавишу для заверешения своей работы. Для этого используется метод ReadKey().
Console.ReadKey( );
}
}
} //не забываем закрывать фигурные скобки
Рис. 5. Результат работы программы.
В следующих разделах будут более подробно рассмотрены основные возможности языка С#: синтаксис, типы данных, операторы ветвления программы, циклы, построение классов и создание приложений Windows Forms. Синтаксис С#
Алфавит
Алфавит языка С# включает в себя следующие символы таблицы кодов ASCII:
Символы служат для построения лексем (проще говоря, слов). Существует пять видов лексем:
· идентификаторы;
· ключевые слова;
· знаки (символы) операций;
· литералы;
· разделители.
Ниже приведена таблица № 1, в которой отражены ключевые слова языка C#, использовать которые в качестве идентификаторов не разрешается.
Таблица №1
Ключевые слова языка C#
abstract
do
in
protected
true
as
double
int
public
try
base
else
interface
readonly
typeof
bool
enum
internal
ref
uint
break
event
is
return
ulong
byte
explicit
lock
sbyte
unchecked
case
extern
long
sealed
unsafe
catch
false
namespace
short
ushort
char
finally
new
sizeof
using
checked
fixed
null
stackalloc
virtual
class
float
object
static
void
const
for
operator
string
volatile
continue
foreach
out
struct
while
decimal
goto
override
switch
default
if
params
this
delegate
implicit
private
throw
Комментарии
При написании программ бывает очень важно написать комментарии к Вашему программному коду, иначе, в последствие, при обращении к какой-то его части Вы сами можете забыть ход своих мыслей.
Комментарии в С# могут быть двух видов:
1. Однострочный комментарий. Символ // означает начало комментария, который заканчивается в конце строки.
2. Многострочный комментарий. Ими обычно пользуются для того, чтобы закомментировать какую-то часть кода или при необходимости написать комментарий из нескольких строк.
Типы данных в С#
Встроенные типы
Как уже говорилось в разделе «Основные понятии», в платформе .NET существует CTS – Common Type System - стандартная система типов, которая является общей для всех языков программирования платформы.
Все типы в С# .NET делятся на Типы значений и Ссылочные.
Тип значения (value type) - тип, содержащий реальные данные. Этот тип не может быть равен null. Типы значений хранятся в области, известной как Стек.
Пример типов значений:
int x = 10, long y = 100;
Ссылочный тип (reference type) - тип, содержащий ссылку на значение. Ссылочные типы хранятся в области, которая называется Управляемая куча. Управляемая куча - это область памяти, в которой хранятся объекты, создаваемые с помощью ключевого слова new. Фактически это оперативная память вашего компьютера. При переполнении кучи вызывается сборка мусора.
Пример ссылочного типа:
string str = “Привет, пользователь!”;
//создали переменную str ссылочного типа String, которая указывает на объект в памяти, содержащий строку «Привет, пользователь!»
Типы значений в свою очередь подразделяются следующим образом:
· целочисленные типы;
· типы с плавающей запятой;
· символы;
· логический тип;
· десятичный тип.
Ссылочные типы делятся на:
· объекты;
· строки.
Ниже представлена таблица №2 встроенных типов.
Таблица № 2
Встроенные типы данных языка С#
СТS Тип
Имя в С#
Описание
System. Object
object
Класс , базовый для всех типов (CTS)
System. String
string
Строка
System. SByte
sbyte
8 -разрядный байт (со знаком)
System. Byte
byte
8 -разрядный байт (без знака)
System. S16
short
16-разрядное число (со знаком)
System. UM16
ushort
16-разрядное число (без знака)
System. Int32
int
32-разрядное число (со знаком)
System. UInt32
uint
32-разрядное число (без знака)
System. Int64
long
64-разрядное число (со знаком)
System. UInt64
ulong
64-разрядное число (без знака)
System.Char
char
16-разрядный символ (Unicode)
System. Single
float
32-разрядное число с плавающей точкой, (стандарт IEEE)
System. Double
double
64-разрядное число с плавающей точкой, (стандарт IEEE)
System. Boolean
bool
Булево значение (true/false)
System. Decimal
decimal
Данный 128 разрядный тип используется в основном, когда требуется крайне высокая точность (до 28 знака)
Преобразование типов
Преобразование объектов одного типа в другой может быть проведено явно или неявно. Неявные преобразования происходят автоматически, компилятор делает все за вас. Явные преобразования осуществляются, когда Вы «приводите» значение к другому типу с использованием операторов приведения.
Пример неявного преобразования типов:
short a = 100;
int b = a; // неявное преобразование.
Если при компиляции неявного преобразования возможна потеря информации, то компилятор не станет выполнять такое преобразование.
Пример явного преобразования типов:
short a;
int b – 100;
a = (short) b; // явное преобразование произойдет успешно.
Переменные
Переменные – объекты определенного типа, расположенные в памяти, которые могут изменять свое значение. Переменные могут иметь значения, которыми они проинициализированы или могут изменять свое значение в ходе выполнения программы.
Пример.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
int a = 5;
Console.WriteLine("Начальное значение переменной равно \t"+a);
Console.ReadKey();
a = 10;
Console.WriteLine("Теперь значение переменной равно\t"+a);
Console.ReadKey();
}
}
}
Рис. 6. Результат работы программы.
Константы
Константы – это объекты, значение которых не может быть изменено. Бывают случаи, когда есть необходимость сохранить значение переменной, чтобы в ходе выполнения программы его нельзя было изменить. Такими константами могут быть всем известное число ПИ или Гравитационная постоянная.
Константы могут быть следующих видов:
· литеральные константы;
· символические;
· перечисления.
x = 2;
Значение «2» - это литеральная константа. Значение 2 –это всегда 2. Мы не можем сделать так, чтобы число 2 представляло какое-либо другое значение.
Символические константы определяют имя для некоторого постоянного значения. Для объявления символической константы необходимо использовать следующий синтаксис:
Перечисления используются как некоторая альтернатива обычным константам. Перечисления представляют собой список поименованных констант, объединенных логически, которыми очень удобно пользоваться. Это может быть список дней недели, месяцев, дни рождения родственников.
Так будет выглядеть список констант, содержащий дни недели:
enum Week
{
const string pn = “Понедельник”;
const string vt = “Вторник”;
const string sr = “Среда”;
const string cht = “Четверг”;
const string pt = “Пятница”;
const string sb = “Суббота”;
const string vs = “Воскресение”;
}
Итак, все дни недели логически сгруппированы и являются элементами одного перечисления типа Week.
Выражения
Выражение – некоторый код, определяющий значение. Например:
x = 10;
Оператор «=» устанавливает значение для переменной х равным 10. Также возможна следующая запись:
y = x = 10;
В данном случае переменной х присваивается значение 10, а затем оператор присваивания устанавливает вторую переменную y с тем же значением.
Инструкции
Инструкция – это некоторое законченное выражение в программном коде. Любая программа на языке С# состоит из последовательности определенных инструкций, после каждой из которых обязательно должен стоять символ « ; ».
Пример записи инструкций:
string str; // инструкция
a = 5; //инструкция
double у = х; //инструкция
Также возможна запись составных инструкций. Это набор простых инструкций, заключенных в фигурные скобки:
{
string str; // инструкция
a = 5; //инструкция
double у = х; //инструкция
}
Компилятор будет обрабатывать составную инструкцию как набор простых инструкций, в том порядке, в котором они написаны.
Разделители
В языке С# пробелы, табуляция, символ перехода на новую строку являются разделителями. В коде можно поставить один за другим несколько разделителей, но компилятор обработает их как один и проигнорирует лишние разделители. Поэтому в коде программы возможны следующие, абсолютно равнозначные записи:
х=1;
или
х = 1.
Из этого правила, как всегда бывает, есть исключение. Разделители в пределах строки (объекта типа string) будут обработаны как отдельные символы строки. То есть запись
Consol.WriteLine («Хочу быть ПРОГРАММИСТОМ !!!»);
будет обработана компилятором именно в таком виде, в котором она представлена выше в символах « », со всеми пробелами.
Ветвление программы
Для большей гибкости программ и возможности выполнения различных сценариев в языке С# предусмотрены операторы перехода. Существует два вида перехода: условный переход и безусловный переход.
Безусловные переходы
Безусловный переход может быть осуществлен следующими способами:
· с помощью вызова функции;
· с помощью ключевых слов goto, break, continue, return или throw.
Пример безусловного перехода с использованием функции.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Запустили программу. Работает метод Main...");
Function();
Console.WriteLine("А тпереь опять работает метод Main.");
Console.ReadKey();
}
static void Function()
{
Console.WriteLine("Теперь моя очередь работать. Работает функция Function:)");
}
}
}
Рис. 8. Результат работы программы.
Результат работы программы:
В консоль выводится строка: «Запустили программу. Работает метод Main...»
Далее программа осуществляет переход к функции Function, определенной ниже и в консоль выводится строка: «Теперь моя очередь работать. Работает функция Function:)»
Затем программа возвращается к выполнению последней инструкции и в консоль выводится еще одна строка: «А теперь опять работает метод Main.»
Пример безусловного перехода с помощью ключевого слова goto.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication5
{
class Program
{
static void Main(string[] args)
{
int a = 0;
Console.WriteLine("Выведем на экран последовательно числа от 0 до 10");
Label:
Console.WriteLine("a = "+a);
a = a + 1;
if (a<=10)
goto Label;
Console.ReadKey();
}
}
}
Рис. 9. Результат работы программы.
Результат работы программы.
В консоль выводится строка: «Выведем на экран последовательно числа от 0 до 10»
В консоль выводится строка: «а = 0»
Далее идет приращение переменной «а» на единицу: «а=а+1»
Проверяется условие: «Значение «а» меньше 10?»
Если меньше, то программа выполняет инструкцию goto Label и возвращается к метке Label.
Далее операция повторяется, пока «а» не достигла значения 10.
Когда значение «а» достигло 10, программа переходит к инструкции Сonsole.ReadKey(), которая ожидает от пользователя нажатия на любую клавишу для завершения работы программы.
Условные переходы
Условные переходы используются для ветвления программы относительно какого-либо условия, установленного разработчиком, либо полученного в ходе каких-либо расчетов. Данные переходы реализуются с помощью ключевых слов if, else, switch.
Оператор выбора (условный оператор if …else)
Оператор if относится к операторам ветвления программы. Суть его работы состоит в следующем: анализируется условие, указанное в круглых скобках оператора if. Если условие верно (его значение true), то программа переходит к выполнению инструкций в блоке if. Если условие не верно (значение false), программа переходит к альтернативному варианту инструкций, указанных в блоке оператора else. Структура оператора if имеет следующий вид:
if (условие)
{
инструкции
}
else
{
инструкции
}
При этом оператор if можно использовать без дополнения else. Также в блоке инструкций оператора if можно расположить еще один оператор if с каким-либо условием. Получиться вариант ветвления, в котором второй оператор if вложен в первый.
Рассмотрим программу, содержащую оператор условного перехода if…else.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Primer1
{
class Program
{
static void Main(string[] args)
{
string Name;
int temp;
Console.WriteLine("Привет! Как тебя зовут?");
Name = Console.ReadLine();
Console.WriteLine("Привет,\t"+Name+".\t\nКакая температура на улице?");
temp = Convert.ToInt32(Console.ReadLine());
//определяем условие для оператора условного перехода
if (temp >= 20)
{
Console.WriteLine("Сегодня хорошая погода. Сейчас бы погулять");
}
//если условие выше не сработало, то определяем альтернативный //сценарий
else
{
Console.WriteLine("Хм...А я думал сегодня теплее. Останусь-ка я дома:)");
}
Console.ReadKey ();
}
}
}
Рис. 10. Результат работы программы.
Результат работы программы будет выглядеть следующим образом:
В консоль выводится вопрос: «Привет! Как тебя зовут?»
Пользователь вводит свое имя: «Макс»
В консоль выводится следующий поврос: «Привет, Макс. Какая температура на улице?»