Основы программирования

Содержание

Слайд 2

MSIL-компиляция HelloWorld.cs HelloWorld.vb HelloWorld.js csc.exe vbc.exe jsc.exe HelloWorld.exe Cодержит MSIL-код (Microsoft

MSIL-компиляция

HelloWorld.cs

HelloWorld.vb

HelloWorld.js

csc.exe

vbc.exe

jsc.exe

HelloWorld.exe
Cодержит MSIL-код (Microsoft Intermediate Language - MSIL)

JIT-компилятор (Just In Time -

JIT)

Коды операций процессора (x86, x64, ARM и т.д.)

Выполнение

Слайд 3

Программный код компилируется в промежуточный код (Intermediate Language – IL, MSIL,

Программный код компилируется в промежуточный код (Intermediate Language – IL, MSIL,

CIL)
CLR – не интерпретатор. Компиляция происходит 1 раз. Повторно не компилируется, а используется уже откомпилированный код

JIT компиляция и CLR

Более медленный старт и работа приложения
Экономия памяти
Код на IL обычно занимает меньше места
Компилируется только тот код, который выполняется
JIT компилятор получает высоко оптимизированный код (заточенный под конкретную аппаратную модель)
CLR отслеживает частоту вызова и может производить оптимизацию налету

Слайд 4

Common Language Runtime - CLR Виртуальная исполняющая среда Отвечает за: Загрузку

Common Language Runtime - CLR
Виртуальная исполняющая среда
Отвечает за:
Загрузку сборок
Just In Time

компиляцию
Управление памятью
Управление безопасностью

Общеязыковая среда выполнения

Слайд 5

Автоматическая сборка мусора Управление памятью // Утечка памяти в C char

Автоматическая сборка мусора

Управление памятью

// Утечка памяти в C
char *f(int a)
{

char *p = (char)malloc(…);

return p;
}

void g(){ f(1); }

функция f():

“text”

char *p

функция g():

“text”

Сборщик мусора (Garbage Collector - GC) отслеживает ссылки на объекты. Он обнаружит, что на область памяти p больше нет ссылок и освободит эту область.

Утечка памяти

CLR может перенести часто используемые объекты для оптимизации доступа к страницам памяти

Слайд 6

Hello, World! using System; namespace HelloWorld { class HelloWorld { ///

Hello, World!

using System;
namespace HelloWorld
{
class HelloWorld
{
///

Entry point
static void Main(string[] args)
{
Console.WriteLine("Hello, C# World!");
} // end of Main()
} // end of HelloWorld
} // namespace HelloWorld
Слайд 7

Пространство имен объединяет группу семантически связанных между собой типов Позволяет отделять

Пространство имен
объединяет группу семантически связанных между собой типов
Позволяет отделять типы с

одинаковыми названиями
Варианты метода Main
static void Main(){…}
static int Main(){… return 0; }
static void Main(string[] args){…}
static int Main(string[] args){… return 0; }
using позволяет сократить полное название типа (System.Console). Как бы объединяет пространства имен* с текущим (*или тип в C# 6)
.NET использует Unicode.
Название типов можно заводить и на русском языке (но не рекомендуется)
Языки для .NET чувствительны к регистру
Main() и main() разные методы
Вывод на консоль: System.Console.WriteLine(“текст”)
Чтение данных с консоли: string s = System.Console.ReadLine()

Замечания

Слайд 8

Каждая переменная и экземпляр объекта в системе относится к четко определенному

Каждая переменная и экземпляр объекта в системе относится к четко определенному

типу !!!
Все типы происходят от одного корневого предка – типа object *
* - точнее приводятся к типу object

Строгая типизация в C#

Слайд 9

Типы в C# Типы в C# Ссылочные типы Типы-значения Массивы Классы

Типы в C#

Типы в C#

Ссылочные типы

Типы-значения

Массивы

Классы

Интерфейсы

Делегаты

Структуры

Простые типы

Перечисления

Строки

Nullable types

* - условная схема,

поскольку все ссылочные типы (кроме интерфейсов) – классы, все типы значения - структуры
Слайд 10

Самые важные типы int – 32-битное целое (System.Int32) bool – логический

Самые важные типы

int – 32-битное целое (System.Int32)
bool – логический тип (System.Boolean).

Значения только true и false
float, double – вещественные типы (System.Single и System.Double)
char – символьный тип Unicode
string – строка текста (Unicode)
DateTime – дата и время
Слайд 11

Простые целые типы * Все типы – типы значения

Простые целые типы

* Все типы – типы значения

Слайд 12

Вещественные типы * Все типы – типы значения ** Не имеет аппаратной поддержки Всегда проверяет диапазон

Вещественные типы

* Все типы – типы значения

** Не имеет аппаратной поддержки

Всегда проверяет диапазон
Слайд 13

Важные типы bool – логический тип System.Boolean Значения только true и

Важные типы

bool – логический тип
System.Boolean
Значения только true и false
Тип значение
string –

строка текста (Unicode)
System.String
неограниченной длины
Ссылочный тип
DateTime – дата и время
Структура (тип-значение)
От 1 января 1 года до 31 декабря 9999 года
Точность 100 нс
Работает с временными зонами
Слайд 14

Неявное приведение типов ulong long uint int ushort short byte sbyte

Неявное приведение типов

ulong

long

uint

int

ushort

short

byte

sbyte

float

double

decimal

char

Возможна потеря точности при:
int, uint, long, ulong → float
long,

ulong → double.

Общий принцип: тип с меньшим диапазоном преобразуется в тип с большим диапазоном

Слайд 15

Синтаксис: (type)expression Пример: double d = 5.5; int i = (int)d;

Синтаксис:
(type)expression
Пример:
double d = 5.5;
int i = (int)d;
Применяется при преобразованиях типов

с возможной потерей точности
При «зашкаливании» результат определяется контекстом

Явное приведение типов

Слайд 16

Контекст проверки вычисления 2 контекста checked – проверяет на переполнение unchecked

Контекст проверки вычисления

2 контекста
checked – проверяет на переполнение
unchecked – не проверяет
Устанавливаются
Глобально

(опции проекта)
Локально (блоки checked и unchecked)
Не распространяется на вызовы функций
По умолчания проверка выключена.
Однако, если значение выражения может быть вычислено в процессе компиляции, то употребляется контекст checked
byte h = (byte) (255 + 100); // вызовет ошибку в процессе компиляции
Слайд 17

Если значение целое и оно помещается в int – то подразумевается

Если значение целое и оно помещается в int – то подразумевается

int
5 – тип int Пример: int i= 45;
Если значение вещественное – то подразумевается double
5.6 – тип double Пример: double d= 12.277;
Для обозначения конкретных типов служат “суффиксы”
5l – long Пример: long l = 5l;
5.4f – float Пример: float f = 5f;
4m – decimal Пример: decimal d = 0m;
Шестнадцатеричное число 0xЧИСЛО
0x0099 Пример: int i= 0x1234FFFF;
Восьмеричное число 0ЧИСЛО
06789 Пример: int i= 05777;
Выражения. Тип выражения определяется в порядке приоритета:
Если в выражении присутствует decimal, то результат операции – decimal
Если присутствует вещественное число, то результат операции – double
ulong, если присутствует тип ulong
long, если присутствует тип long
Результат операции с целыми числами – int

Типы данных по умолчанию