Уроки по C#. Роман Свистунов

=====================================
Здравствуйте! Я для начала скажу, что это обучающая страница. Для программирования на C# нам понадобится компилятор. Я рекомендую Microsoft Visual Studio. В частности по этой ссылке http://www.visualstudio.com/ru-ru/products/visual-stu.. можно найти Visual Studio 2013 Express. Подбирайте под себя, хотя мне нравится Express 2013 для Windows Desktop. Наверняка у кого то уже стоит Visual Studio, тогда новый устанавливать не обязательно. То что ещё нужен компьютер, клавиатура и мышка желательно надеюсь можно не говорить. : — )
Почему именно C#?

Многие задают этот вопрос. C# — один из самых современных языков программирования. На нём затрачивая минимальное время можно писать полезные программы. Возможности работы с файлами открывают новые возможности вплоть до создания новой системы программирования. А в общем C# — простой и многофункциональный язык программирования.

А теперь давайте перейдём к программированию.

Для начала запускаем Visual Studio. Далее мы с вами создадим консольное приложение. Это самое простое приложение, в смысле, что оно поддерживает только текст, никакой графики. И так. Следуем по инструкции:
Файл (File) —> Создать проект (grete project) —> Консольное приложение (Console Application) Вводим внизу имя и жмём ОК. Должен был появиться код типа:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
}
}
}

Мы не будем сейчас разбирать его, это станет ясно позже. Важно лишь что появившийся код это уже готовая программа. Только она ничего не делает.
Однако существует своего рода традиция программирования писать «Hello, World» — программу, выводящую на экран фразу «Hello, World».
Мы же с вами отступать от традиций не будем и напишем такую программу. Для этого будем использовать команду Console.WriteLine(SomeString), где SomeString — некоторая строка. Строка задаётся в двойных кавычках «…». Здесь надо сказать что в C# после каждой команды ставится точка с запятой «;». Добавляем команду и получаем код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(«Hello, World»);
}
}
}

Чтобы запустить программу нажимаем наверху кнопку «Запустить» («Run»). Как видим, программа работает, но сразу закрывается, что не даёт увидеть результата. Тогда добавим ожидание нажатия любой клавиши командой Console.ReadKey(). Важно сказать, что C# чувствителен к регистру, то есть «привет» и «ПРИВЕТ» это совсем не одно и тоже. Код должен получатся таким:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(«Hello, World»);
Console.ReadKey();
}
}
}

Такая программа работает корректно. На этом всё. Сами можете попробовать сделать программы, выводящие на экран какие либо слова и тексты.

Теперь мы рассмотрим,
как хранить данные в C#.
————————
В C# имеются переменные. Переменная — именованная область памяти. В переменную данные можно записывать и считывать. Данные, записанные в переменной называются значением переменной.
C# — язык жёсткой типизации. Это значит, что в нём каждая переменная имеет конкретный тип данных. Ниже приведены встроенные типы данных C#.

sbyte: числа от -128 до 127
byte: от 0 до 255
bool: true или false
short: от -32768 до 32767
ushort: от 0 до 65535
int: от -2147483648 до 2147483647
uint: от 0 до 4294967295
long: от -9223372036854775808 до 9223372036854775807
ulong: от 0 до 18446744073709551615
float: Число с плавающей запятой. Область значений не указываю (Самому не известна). Точность 7 разрядов.
double: Число с плавающей запятой. Область значений не указываю (Самому не известна). Точность 16 разрядов.

для того, чтобы использовать переменную, нужно её сначала объявить. Тут скажу, что после символов // идёт комментарий до конца строки. Многострочный комментарий объявляется /* комментарий */:

int a; //объявляем переменную а типа int
a = 5; //записываем в переменную а значение 5
int b, c; //можно объявлять сразу несколько переменных через запятую
bool d; //создаём переменную типа bool
d = true; //записываем в переменную d значение истина
float e = 6.4f; //для записи числа с плавающей точкой типа float нужно после числа добавлять
//суффикс f

При использовании переменной, которой не присвоено значение компилятор выдаст ошибку «Use of unassigned local variable [имя_переменной]»:

int a;
Console.WriteLine(a); // ошибка.

Имя переменной должно отображать суть её значения. Не стоит называть переменные ни о чём не говорящими именами a, b, c, используйте английские слова: высота — height, возраст — age.

НИКОГДА не используйте русские буквы в именах переменных.

Преобразование типов данных.
—————————-
Переменные одного типа могут быть преобразованы к другому типу. Преобразование бывает явным и неявным. Неявное преобразование выполняет компилятор. Пример неявного преобразования:

int a = 35000;
short b = 10;
a = b; //Неявное преобразование возможно, так как int большего размера, чем short.
b = a; //Ошибка. Нельзя неявно преобразовывать типы большего размера в меньшего.

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

int a = 35000;
short b = 10;
b = (short)a; // На этот раз ошибки не будет. Максимальный размер типа short 32767, из за этого будет потеря данных.

Константы

Константа — переменная, значение которой нельзя изменить (Константа — неизменяется никогда). Константы используются для того, чтобы получить полную уверенность, что значение соответствующей переменной не изменится в ходе программы.
Для объявления константы используется ключевое слово const:

const int month = 12; // Объявляем константу, с фиксированным количеством месяцев.
month = 13; // Ошибка компиляции. Константа неизменяема.

Константы на самом деле бывают двух типов: простые и литералы:

Console.WriteLine(45); //45 всегда есть 45, это константа, а точнее числовой литерал.
Console.WriteLine(«Good»); //А здесь строка «Good» будет являться строчным литералом.

Ключевое слово var

Начиная с версии C# 3.0 в языке появилось новое ключевое слово var (от variable — переменная). С его помощью вам не понадобиться определять тип переменной. Это сделает за вас компилятор. Но банальности компьютера не обойдёшь — всё равно, тип определился сразу и потом его изменить уже нельзя. Пример:

var number = 5; // Переменной автоматически присваивается тип int
number = «SomeText»; // Ошибка, тип int — не строка

Типы данных.
————-
Все типы данных, рассмотреные выше являлись структурными. Ещё существуют ссылочные типы. Базовыми типами ссылочных типов являются object и string.
Object является базовым типом для всех остальных типов данных. String используется для хранения строк. Пример:

string text = «Hello, world!»; // Создание переменной типа string
Console.WriteLine(text); // Использование такой переменной. Выводит на экран «Hello, world!»

Структурные типы хранятся в стеке.

Стек — область памяти с принципом первым зашёл — последним вышел. Скорость работы со стеком гораздо выше скорости работы с оперативной памятью, поэтому использование структурных типов данных повышает скорость работы программы.

Ссылочные данные имеют ссылку в стеке, но хранятся в куче.

Куча — область памяти, выделенная программе для хранения данных. Доступ к куче медленнее, чем к стеку.

Ввод данных

Команда консоли Console.ReadLine() считывает введённую пользователем строку:

string a;
a = Console.ReadLine(); // Данные, введённые с клавиатуры сохраняются в переменную
Console.WriteLine(a); //Выводит введённые с клавиатуры данные.

Теперь мы поговорим об
арифметических и логических операциях,
————————————-
которые являются обязательными в программах (точнее они очень важны и без них НЕЛЬЗЯ написать сложную и полезную программу.)

Все основные операции делятся на 2 типа: унарные и бинарные. Унарные — это те, в которых участвует один операнд, в бинарных операндов 2. (Операнд — какое либо значение, используемое для операторов. Например в записи 2+5 числа 2 и 5 являются операндами) Арифметические операторы:

оператор +: бинарный, оператор сложения
оператор -: бинарный, оператор вычитания
оператор *: бинарный, оператор умножения
оператор /: бинарный, оператор деления
оператор %: бинарный остаток от деления (9%5 = 4, так как 9/5 = 1(ост.4))

Оператор деление имеет важную особенность — при делении целых чисел результат будет целым числом, то есть 9/5=1. Чтобы ответ был в формате float, то есть точным надо добавлять суффикс f: 9/5f = 1.8.

В программировании чтобы повысить приоритет операции также используются скобки: 2+2*2=6, (2+2)*2=8.

Если использовать оператор + для строк, то произойдёт конкатенация. Конкатенация — объединение нескольких объектов (в том числе строк) в один.

Унарные арифметические операторы

Унарных арифметических операторов в C# только два: инкрементация «++» и дискрементация «—«. Инкрементация это увеличение на 1 то есть а++ = а+1, дискрементация это уменьшение на 1.
++++++++++++++++++++++++++++++++++++++++++++++++++++

Возможно у вас возникал вопрос: «Зачем мне вообще эти консольные приложения?»

На него несомненно есть ответ. Во первых зачем тратить время на разработку сложного приложения, если вам нужно, что-бы пользователь вам ответил «да» или «нет». Вы укажете формат и всё нормально. Они поддерживают те-же функции, что и сложные игры, но отсутствует графика. Но её можно заменить и написать примитивную игру уже в консоли (в качестве примера можете скачать по ссылке http://rusfolder.com/42959665 с файлобменника крестики-нолики). Консоль идеально подходит для обучения.

В целом консольные приложения полезны. Главное научиться их использовать!
+++++++++++++++++++++++++++++++++++++++++++++++++++

Поговорим о логических операторах в C#.
—————————————-

Все эти операторы определяют истинность некоторого условия, то есть возвращают true или false в зависимости от условия.

Оператор «НЕ»
Унарный оператор, обозначающийся «!» и возвращающий обратное. А именно:
!true // false
!false // true

Оператор равенства
Бинарный оператор, обозначающийся «==». Проверяет равенство значений. Имеет важные особенности при работе с ссылочными типами данных:
string a = «Hello, world»; // Объявляем переменную ссылочного типа
string b = a, c = a; // Присваиваем её значения ещё в две переменные
string d = b, e = c; //Присваиваем из новых переменных ещё в две
d == e; //false, ссылаются на разные объекты

Оператор !=
Бинарный оператор, обратный оператору сравнения, или оператор «неравно»

Оператор «ИЛИ»
Бинарный оператор, обозначаемый ||, Возвращает ложь, если оба операнда ложны, иначе истину

Оператор «И»
Бинарный оператор, обозначаемый &&, возвращает истину, если оба операнда истинны, иначе ложь

Операторы сравнения
Название обо всём говорит, их список(кроме равно и не равно, о которых сказано выше):

> больше
< меньше >= больше или равно
<= меньше или равно Задание Это первое задание, которое вам даётся. здесь задача будет следующая: с клавиатуры вводится число, нажимается Enter и вводится ещё одно число. Числа — длины катетов прямоугольного треугольника. После этого выдаётся два числа. Первое — длина гипотенузы треугольника, второе — его площадь. Используйте теорему Пифагора. В помощь понадобится функция Convert.ToInt32([какая-то_строка,_преобразуемая к числу]). Высылаем свои коды с первым словом на отдельной строке «Треугольники» (Чтобы было понятно, что это именно к этому заданию). Ищем лучшего. Этот победитель своеобразного конкурса будет объявлен (Можно будет делать репосты и т.д. ил проста для результата). Оценивается количество кода и вообще работоспособность программы.

 
Задание 2.
Сделать программу, которая спрашивает у пользователя его имя и возраст. Возраст приводим к Юпитерскому (год на Юпитере равен 12 Земным) и выдаёт данные на подтверждение (Земной и Юпитерский возраста, имя).

Условные операторы.
Обязательно стоит попрактиковаться. Тема очень важная!

Итак. Нам нередко нужно проверять что либо на истинность. Мы ждём друга в гости и в зависимости от того, пришёл он или не пришёл выполняем разные действия (радуемся встрече или звоним другу). В C# проверка условий реализована тремя способами. Все они будут сейчас рассмотрены.

if-else
Одна из конструкций. Синтаксис:

if ([условие])
{
//код 1
}else{
//код 2
}

объясню. [условие] — обязательно типа bool. Тут можно применять операторы сравнения. Если оно истинно, исполняется код 1, иначе код 2. Рассмотрим более сложный вариант:
if([условие1])
{
//код 1
}
else if([условие2])
{
//код 2
}
else
{
//код 3
};
Тут принцип тот-же, но else if задаёт дополнительное условие. Во всей коеструкции else можно опускать. Если команда только одна, то скобки можно опустить:
if(a)
Console.WriteLine(«1»);
else
Console.WriteLine(«2»);
работает корректно.

switch
Синтаксис:

switch(a)
{
case [значение1]:
//код 1
break;

default:
//код х
break;
};
Аналог в if else:
if(a == [значение1])
{
//код 1
}

else
{
//код х
};
Здесь default аналогично можно опустить.

Тернарный оператор ?:
Этот тернарный оператор имеет следущий синтаксис:
[условие]?[команда1]:[команда2];
Аналог в if-else:
if([условие])
[команда1];
else
[команда2];
Команды только по одной.

Консоль — примитивное устройства ввода — вывода.

История консоли
Раньше компьютеры были огромными. На предприятиях компьютер устанавливали в отдельном помещении, а к сотрудникам выводили только экран и клавиатуру. Сотрудник вводил данные с клавиатуры. Текстовая информация выводилась на экран. Он и назывался консолью.

Реализация консоли в C#
Во-первых. В C# консоль разноцветная. Как изменить её цвет будет показано после разбора некоторых основных принципов. плюс консоль умеет «пищать» (как старые ПК, когда переключаешь режимы Num loock, Caps look, scroll look).
ООП
C# объектно-ориентированный язык программирования. Рассмотрим, что же такое объектно-ориентированное программирование (ООП).
Все машины имеют что то общее. У них у всех есть вес, максимальная скорость, мощность двигателя, привод, тип тормоза и т.д. Тогда зачем описывать каждую машину с нуля, если сделать так называемый «класс» объектов, у которых будут такие общие пункты.
Именно так можно сделать в C#.

Из чего «сделано» ООП
ООП — понятие широкое. Тем не менее в нём есть:
1. Классы
2. Структуры
3. Интерфейсы
4. Пространства имён
5. Делегаты
6. События
При этом всё это ещё из чего то состоит. Всё это будет рассмотрено подробнее далее. Сегодня начнём изучать классы.

Анализ прошлых программ
Как вы помните, все прошлые программы начинались так:
using System;
using System.Text;
using System.Linq;
using System.Collections.Generic;

namespase ConsoleApplication1
{
class Programm
{

}
}

Тут уже объявляется класс.

Класс
класс объявляется с помощью ключевого слова class.
Общая форма объявления класса следующая:
class #имя_класса#
{
//начинка
}

Модификатор доступа
модификатор доступа — своеобразное ограничение. Часто куда то пройти могут все. На других видна табличка «посторонним вход запрещён». В ООП четыре модификатора доступа:
1. public — доступ из любой точки кода
2. private — доступ только из класса объявления
3. protected и internal &#8212 будут рассмотрены в последующих уроках
Теперь начнём начинять класс.

Поле
Поле, это как бы переменная. разница лишь в том, из какой части кода она доступна. Она доступна по имени класса или его экземпляру (в зависимости от того, статическая она или нет. Статические элементы начинки рассмотрим далее) посредством оператора-точка. Общая форма объявления поля:
#модификатор_доступа# #тип_поля# #имя поля#;
Теперь создадим программу с классом. всё помечено в комментариях.
using System;
using System.Text;
using System.Linq;
using System.Collections.Generic;

namespase ConsoleApplication1
{
class Building
{
public int floors;
}
class Programm
{
public static void Main()
{
Building house = new Building();//Объявляется экземпляр класса Building
house.floors = 3;//присвоить полю floors значение 3
Console.WriteLine(«В доме » + house.floors + » этажей»);
Console.ReadKey();
}
}
}
Эта программа показывает, как объявлять экземпляры класса и использовать их поля. Вы можете создать другой экземпляр, например office, но учтите, поле floors у каждого экземпляра разное. То есть если его изменить в экземпляре office, то ничего не изменится в house. Можете поэкспериментировать с классами и их экземплярами.

очередной элемент класса — Метод.

Метод — последовательность команд, рассматриваемых как единое целое.
Общая форма объявления метода:
#модификатор_доступа# [#ключевые_слова#] #возвращаемый_тип# #имя_метода#([#список_аргументов#]){ #команды# }
О ключевых словах речь пойдёт позже
Возвращаемый тип
возвращаемый тип — любой встроенный тип, имя класса или структуры(о них речь пойдёт позже) либо ключевое слово void, которое означает, что метод ничего не возвращает.
Аргументы
Аргументы передаются списком через запятую. Общий вид параметра:
[#ключевые_слова#] #тип_параметра# #имя_параметра#

Главный метод — начало исполнения
Строка public static void Main(string[] args) объявляет метод. В C# выполнение программы начинается с метода Main.

Методы — применение на практике
В прошлом уроке мы создали класс Building. Сегодня мы его усовершенствуем — добавим целочисленное поле occupants — кол-во людей в здании и поле типа double — area, общая площадь. А также метод AreaForPeople(), который будет вычислять площадь на человека. программа примет следующий вид:
using System;
using System.Text;
using System.Linq;
using System.Collections.Generic;

namespase ConsoleApplication1
{
class Building
{
public int floors;
public double area;
public int occupants;
public double AreaForOne(){//Объявление метода без параметров возвращающего тип double
return area/occupants;
}
}
class Programm
{
public static void Main()
{
Building house = new Building();
house.area = 10.10;
house.occupants = 10;
Console.WriteLine(house.AreaForOne());
}
}
}
В результате появится надпись «1.01»

Методы с параметрами.
Итак, как такие методы объявляются.

Общий синтаксис:
#модификатор доступа# #возвращаемый тип# #имя метода#(#тип параметра 1# #имя параметра 1#, #тип параметра 2# #имя параметра 2#…){ #код#}
То есть, объявление метода с параметрами ничем не отличается от методов без параметров, однако нужно дополнительно указывать тип и имя параметра в скобках.

Обращение к параметру
В методах с параметрами необходимо к параметрам обращаться, ведь иначе зачем вообще нужны параметры? 🙂 на самом деле это просто. параметры, это как переменные. Из метода можно написать имя параметра, что и означает обращение к нему.

Передача параметра
Чтобы передать параметры методу в скобках нужно указать их значения в порядке объявления. Параметры также можно передавать явно. Тогда нужно писать имя параметра, затем двоеточие и потом значение. Все параметры нужно передавать одним способом. При явной передаче можно не соблюдать очерёдность.

Ключевое слов ref
Если перед именем параметра установить ключевое слово ref, то в параметр попадёт не значение, которое мы передаём, а ссылка на него. Если обычный параметр, какие бы значения мы в методе ему не присваивали вне его не изменится, то есть переменная, которую мы передадим, сохранит значение. А ecли передать переменную параметру со словом ref, то все изменения в методе будут изменять и переменную. При передаче параметра ref нужно указывать ключевое слово, как и при объявлении. Переменная, переданная параметру ref должна быть инициализирована, то есть должна иметь значение.

Ключевое слово out
Ключевое слово out выполняет ту же функцию, что и ключевое слово ref, но перед передачей переменная не обязательно должна быть инициализирована.
Вопросы можно задавать тут

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *