Слайд 1Программирование
Тема 2.2 Введение в C#
Слайд 2 C# и платформа .NET
C# – это язык
программирования для платформы .NET (.NET Framework ) (2000, Microsoft, Андерс
Хейлсберг)
Другие основные языки программирования платформы . NET:
VB.NET, Managed C++ и JScript .NET.
Платфома .NET:
CLR (Common Language Runtime) - общеязыковая среда выполнения ;
FCL (Framework Class Library) - библиотека классов.
В составе библиотеки базовых классов выделяется:
CTS (Common Type System) – общая система типов
Visual Studio .NET – среда разработки для .NET Framework
Слайд 3 Структура, компиляция и выполнение C#-программы в .NET
Слайд 4 Структура, компиляция и выполнение C#-программы в .NET
Исходный код
на С # – это текстовый файл с расширением cs,
содержащий в себе одно или несколько описаний классов. Среди классов должен быть класс, содержащий метод main(). Именно с метода main() начинается выполнение программы. Текстовый файл с исходным кодом программы не обязательно должен иметь имя, совпадающее с именем класса, содержащим метод main() (как в Java). Рекомендуется каждый класс программы размещать в отдельном файле с расширеним cs.
Исходный файл на C# компилируются с помощью C# - компилятора в файл с расширением .exe. Файл с расширением exe (сборка) содержит не машинный код, исполняемый непосредственно процессором, он содержат код на языке IL (intermedia language).
Общеязыковой средой выполнения(CLR) сборка преобразуется в машинный код и выполняется.
Кроме компиляции и выполнения программы CLR выполняет и другую работу, например автоматическое управление памятью. Система управления памятью CLR называется Garbage Collector (GC) или сборщиком мусора.
Среда CLR обеспечивает интеграцию языков и позволяет объектам, созданным на одном языке, использовать объекты, написанные на другом. Такая интеграция возможна благодаря стандартному набору типов (Common Type System, CTS) и информации, описывающей тип (метаданным).
Слайд 5 Библиотека базовых классов .NET Framework
Наиболее часто используемые пространства
имен библиотеки классов:
System – корневое пространство имен;
System.Collection – контейнерные классы;
System.Windows
– классы для создания графического интерфейса пользователя(GUI);
System.IO – классы для организации файлового ввода - вывода.
Импортирование классов пространств имен в программу:
using System;
using System.Collections;
Слайд 6 Создание консольной программы в MS Visual C# 2010 Express
Файл
-> Создать проект
Слайд 7 Создание консольной программы в MS Visual C# 2010 Express
Пример
программы
Слайд 8 Создание консольной программы в MS Visual C# 2010 Express
Пример
программы
Слайд 9 Создание консольной программы в MS Visual C# 2010
Express
В главном меню выбрать команду Файл – Создать проект…. После
этого откроется диалоговое «Создать проект» (см. слайд 6).
Далее следует выбрать тип создаваемого приложения – Консольное приложение. В строчке Имя следует ввести новое имя приложения ( по умолчанию, ConsoleApplication1) и нажать кнопку OK.
Экран примет вид, изображенный на слайде 7.
Основное пространство экрана занимает окно редактора, в котором располагается текст программы, созданный средой автоматически. В автоматически созданный текст программы добавлены два оператора: Console.WriteLine(“Привет, мир!”); Console.ReadKey();.
В правой части экрана располагается окно управления проектом Обозреватель решений. Замечание. Если вы случайно закроете данное окно, то его можно включить командой Вид – Другие окна – Обозреватель решений.
В этом окне перечислены все ресурсы, входящие в проект:
1) Properties (Свойства), содержит файл AssemblyInfo.cs – информация о сборке.
2) Ссылки на стандартные библиотеки System, System.Data, System.Xml и т.д.
3) Program.cs - исходный текст программы на языке C#.
В левой нижней части экрана располагается окно Список ошибок, которое во время отладки проекта позволит нам получать информацию о локализации и типе ошибок.
Для того чтобы сохранить проект нужно в главном меню выполнить команду Файл – Сохранить все. Откроется диалоговое окно «Сохранить проект» (см. слайд 8).
Имя проекта вы определили на этапе его создания. При необходимости это имя можно изменить. Расположение проекта зависит от установок, которые можно изменить через кнопку Обзор. Сохраним проект на диск E в папку Sharp.
Для того чтобы запустить приложение нужно нажать на кнопку Начать отладку (F5) стандартной панели инструментов VS. В результате программа скомпилируется в IL-код и этот код будет передан CLR на выполнение.
Слайд 10 Типы данных C#
Типы данных C#:
базовые типы;
типы, определяемые пользователем.
Типы
данных C#:
типы - значения;
ссылочные типы.
Типы - значения :
Ссылочные типы:
логический; - object;
целочисленные; - строки string;
вещественные; - классы;
финансовый; - интерфейсы;
символьный; - делегаты.
перечисления;
структуры.
Слайд 11 Типы данных C#
В С# типы делятся на базовые
типы – предлагаемые языком и типы, определяемые пользователем.
Кроме того, типы
С# разбиваются на две другие категории: типы - значения (value type) и ссылочные типы (reference type).
Почти все базовые типы являются типами - значениями. Исключение составляют типы Object и String, которые являются базовыми, но ссылочными типами данных. Все пользовательские типы, кроме структур и перечислений, являются ссылочными. Дополнительно к упомянутым типам, язык С# поддерживает типы указателей, однако они используются только с неуправляемым кодом.
Принципиальное различие между типами-значениями и ссылочными типами состоит в способе хранения их значений в памяти. В первом случае фактическое значение хранится в стеке (или как часть большого объекта ссылочного типа). Адрес переменной ссылочного типа тоже хранится в стеке, но сам объект хранится в куче.
Стек – это структура, используемая для хранения элементов по принципу LIFO (Last input – first output или первым пришел - последним ушел). В данном случае под стеком понимается область памяти, обслуживаемая процессором, в которой хранятся значения локальных переменных. Куча – область памяти, используемая для хранения данных, работа с которыми реализуется через указатели и ссылки. Память для размещения таких данных выделяется программистом динамически, а освобождается сборщиком мусора.
Сборщик мусора уничтожает программные элементы в стеке через некоторое время после того, как закончит существование раздел стека, в котором они объявлены. То есть, если в пределах блока (фрагмента кода, помещенного в фигурные скобки {}) объявлена локальная переменная, соответствующий программный элемент будет удален по окончании работы данного блока. Объект в куче подвергается сборке мусора через некоторое время после того, как уничтожена последняя ссылка на него.
Язык С# предлагает обычный набор базовых типов, каждому из них соответствует тип .NET (см. следующие два слайда).
В С# в отличии от Java есть целые беззнаковые типы данных.
Слайд 14 Консольный ввод-вывод
Вывод данных: Класс Console из пространства
имен System
Cпособы применения метода Console.WriteLine :
Console.WriteLine(x);
Console.WriteLine("x = " +
x +"y = " + y);
Console.WriteLine("x={0} y={1}", x, y);
Пример 1: Использование управляющих последовательностей
Слайд 15 Консольный ввод-вывод
Для организации консольного ввода - вывода используется стандартный
класс Console, определенный в пространстве имен System.
Метод WriteLine, реализованный в
классе Console, позволяет организовывать вывод данных на экран. Существует несколько способов применения данного метода (см. слайд). Первый способ - на экран выводится значение идентификатора х, второй способ - на экран выводится строка, образованная последовательным слиянием строки "x=", значения x, строки "у=" и значения у, третий способ - на экран выводится строка, формат которой задан первым аргументом метода, при этом вместо параметра {0} выводится значение x, а вместо {1} – значение y.
Третий вариант использования метода WriteLine является наиболее универсальным, потому что он позволяет не только выводить данные на экран, но и управлять форматом их вывода.
Пример 1. Использование управляющих последовательностей.
Замечание. В языке С# требуется, чтобы переменные были явно проинициализированы до их использования. Инициализировать каждую переменную сразу при объявлении необязательно, но необходимо присвоить ей значение до того, как она будет использована.
Пример 2. Управление размером поля вывода. Первым аргументом WriteLine указывается строка вида {n, m} – где n определяет номер идентификатора из списка аргументов метода WriteLine, а m – количество позиций (размер поля вывода), отводимых под значение данного идентификатора. При этом значение идентификатора выравнивается по правому краю. Если выделенных позиций для размещения значения идентификатора окажется недостаточно, то автоматически добавится необходимое количество позиций.
Пример 3. Управление размещением вещественных данных. Первым аргументом WriteLine указывается строка вида {n: ##.###} – где n определяет номер идентификатора из списка аргументов метода WriteLine, а ##.### определяет формат вывода вещественного числа. В данном случае, под целую часть числа отводится две позиции, под дробную – три. Если выделенных позиций для размещения целой части значения идентификатора окажется недостаточно, то автоматически добавится необходимое количество позиций.
Слайд 16 Консольный ввод-вывод
Вывод данных: Класс Console из пространства
имен System
Пример 2: Управление размером поля вывода
Слайд 17 Консольный ввод-вывод
Вывод данных: Класс Console из пространства
имен System
Пример 3: Управление размещением вещественных данных
Слайд 18 Консольный ввод-вывод
Вывод данных: Класс Console из пространства
имен System
Пример 4: Управление форматом числовых данных
Слайд 19 Консольный ввод-вывод
Пример 4. Управление форматом числовых данных. Первым аргументом
WriteLine указывается строка вида {n:m} – где n определяет номер
идентификатора из списка аргументов метода WriteLine, <спецификатор> - определяет формат данных, а m – количество позиций для дробной части значения идентификатора. В качестве спецификаторов могут использоваться следующие значения:
Слайд 20 Консольный ввод-вывод
Ввод данных: Класс Console из пространства
имен System
Пример 5:
Слайд 21 Консольный ввод-вывод
Для ввода данных обычно используется метод ReadLine, реализованный
в классе Console. Данный метод в качестве результата возвращает строку,
тип которой string.
Для того чтобы получить числовое значение, необходимо воспользоваться преобразованием данных.
Для преобразования строкового представления целого числа в тип int мы используем метод Parse(), который реализован для всех числовых типов данных. Таким образом, если нам потребуется преобразовать строковое представление в вещественное, мы можем воспользоваться методом float.Parse() или double.Parse(). В случае, если соответствующее преобразование выполнить невозможно, то выполнение программы прерывается и генерируется исключение. Например, если входная строка имела неверный формат, то будет сгенерировано исключение System.FormatExeption.
Для преобразования строкового представления числа в число некоторого типа и для преобразования числа в сткоку можно использовать методы класса Convert.
Слайд 22 Преобразование типов данных в выражениях и при присваивании
Пример
6:
Слайд 23 Преобразование типов данных в выражениях и при присваивании
Выражение
– это синтаксическая единица языка, определяющая способ вычисления некоторого значения.
Выражения состоят из операндов, операций и скобок. Каждый операнд является в свою очередь выражением или одним из его частных случаев –константой, переменной или функций.
Преобразование типов в выражениях может происходить неявно (без участия программистов) следующим образом. Если операнды имеют одинаковый тип, то результат операции будет иметь тот же тип. Если операнды разного типа, то перед вычислениями выполняются преобразования более коротких типов в более длинные для сохранения значимости и точности. Перед выполнением арифметической операции всегда происходит повышение типов byte, sbyte, short, ushort, char. Они преобразуются в тип int, а может быть, и в тип long, если другой операнд типа long. Это правило приводит иногда к неожиданным результатам (см. пример 6).
В выражениях можно использовать операцию явного преобразования типа, например, если нужно более длинный тип преобразовать в короткий (см. пример 6).
Слайд 24 Операции
Операция new:
object z = new object();
int i =
new int(); // то же самое, что и int i
=0;
Пример 7. Умножение (*), деление (/) и деление с остатком (%):
Слайд 25 Операции
Над данными базовых типов можно производить массу операций.
Их набор восходит к языку С, он оказался удобным и
кочует из языка в язык почти без изменений.
Операция new используется для создания нового объекта. С помощью ее можно создавать как объекты ссылочного типа, так и типа значения.
Операции умножения и деления применимы для целочисленных и вещественных типов данных. Для других типов эти операции применимы, если для них возможно неявное преобразование к целым или вещественным типам. При этом тип результата равен «наибольшему» из типов операндов, но не менее int. Если оба операнда при делении целочисленные, то и результат тоже целочисленный.
Слайд 26 Условные и циклические операторы
Синтаксис оператора if :
if
(условие) оператор1; [else оператор2;]
Синтаксис оператора for:
for (инициализация; усл. завершения;
изменение_парам)
оператор;
Синтаксис оператора while:
[инициализация;]
while (усл. завершения)
{ операторы; [изменение_парам;]
}
Синтаксис оператора while:
[инициализация;]
do
{ операторы;
[изменение_парам;]
} while(усл. завершения)
Слайд 27 Условные и циклические операторы
Результатом вычисления условия в операторе
if и условия завершения в операторах for, while, do while
должно быть значение логического типа (boolean): true или false.
Операции сравнения в Java (==, !=, >, <, >=, <=) возвращают результат логического типа.
Логические операции в Java ( &&, ||, ! и другие) возвращают результат логического типа.
В С# нельзя написать: int k = 10;
while(k)
{ … }.
Слайд 29 Класс Math
С# содержит большое количество встроенных математических функций,
которые реализованы в классе Math пространства имен System.
Краткое описание некоторых
математических функций представлена на слайде.
Особое внимание следует обратить на типы операндов и результатов, т.к. каждая функция может иметь несколько перегруженных версий.
Замечание. Использование нескольких функций с одним и тем же именем, но с различными типами параметров, называется перегрузкой функции. Например, функция Math.Abs(), вычисляющая модуль числа, имеет 7 перегруженных версий: double Math.Abs (double x), float Math.Abs (float x), int Math.Abs(int x), и т.д.
Слайд 30 Класс Random
Пример 8. Случайные числа:
Слайд 31 Контрольные вопросы
Понятие и назначение платформы .NET. Структура, компиляция
и выполнение C#-программы в .NET
Классификация типов данных в С#.
Как в С# выполняется преобразование типов данных в выражениях и при присваивании. Примеры.
Консольный ввод-вывод данных в С#: характеристика и примеры.
Особенности организации ветвлений и циклов в Java и C#. Примеры.