Слайд 2Полезные классы из System
AppDomain- среда, в которой выполняются приложения.
Convert- преобразует
![Полезные классы из System AppDomain- среда, в которой выполняются приложения. Convert- преобразует](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/941192/slide-1.jpg)
значение одного базового типа данных к другому.
Enviroment- сведения о текущей среде и платформе.
GC- Управляет системным сборщиком мусора.
WeakReference- слабая ссылка, которая указывает на объект, но позволяет удалять его сборщику мусора.
Слайд 3Зачем нужны исключения?
Решение проблем с кодом вида:
return -1;
Возможность реакции на системные ошибки,
![Зачем нужны исключения? Решение проблем с кодом вида: return -1; Возможность реакции](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/941192/slide-2.jpg)
например: деление на ноль.
Структурирование кода приложения.
Решение или фиксация в логах проблемных ситуаций.
Слайд 4Базовый синтаксис
try {
Funk1();
Funk2();
}
catch (Exception1 ex) { . . . }
catch (Exception2 ex)
![Базовый синтаксис try { Funk1(); Funk2(); } catch (Exception1 ex) { .](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/941192/slide-3.jpg)
{ . . . }
Важно: - Любое исключение наследует от класса Exception;
- Блоков catch один или больше;
- Возможен универсальный блок: catch(Exception ex){ }
- Не все исключения нам предложат обработать.
Слайд 5Полная версия синтаксиса
try {
Funk1();
Funk2();
}
catch (Exception1 ex) { . . . }
catch (Exception
![Полная версия синтаксиса try { Funk1(); Funk2(); } catch (Exception1 ex) {](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/941192/slide-4.jpg)
ex) { . . . }
finally {
// код освобождения ресурсов
}
Возможна сокращённая версия – без catch.
Слайд 6Выброс исключений
Виртуальной машиной CLR.
Библиотечным методом (см. документацию)
throw new Exception();
throw; // только в блоке
![Выброс исключений Виртуальной машиной CLR. Библиотечным методом (см. документацию) throw new Exception();](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/941192/slide-5.jpg)
catch
Обсудить:
catch(Exception ex) { }
if (obj==null) throw new NullReferenceException();
int? n= Customer?.Name?.Length;
Слайд 7Создание своих классов исключений
[Serializable()]
public class MyException : Exception
{
public MyException ()
![Создание своих классов исключений [Serializable()] public class MyException : Exception { public](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/941192/slide-6.jpg)
: base() { }
public MyException (string message) : base (message) { }
public MyException (string message, Exception inner) :
base (message, inner) { }
protected MyException ( SerializationInfo info,
StreamingContext context) { }
}
Слайд 8Контроль переполнения при целочисленных операциях
Для выражения:
checked(выражение);
unchecked(выражение);
Для блока кода:
checked
![Контроль переполнения при целочисленных операциях Для выражения: checked(выражение); unchecked(выражение); Для блока кода:](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/941192/slide-7.jpg)
{ }
unchecked { }
Для всего приложения (см. свойства проекта)
Слайд 9И какой результат?
Проверка включена:
Для константного выражения – ошибка при компиляции приложения.
Не
![И какой результат? Проверка включена: Для константного выражения – ошибка при компиляции](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/941192/slide-8.jpg)
константное выражение – OverflowException.
Проверка выключена:
Усечение результата, потеря старших битов.
Слайд 10Объявление интерфейса
public interface IWork {
void DoWork();
}
public interface IWorkGeom : IWork {
double SolveGeom();
}
Важно:
![Объявление интерфейса public interface IWork { void DoWork(); } public interface IWorkGeom](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/941192/slide-9.jpg)
- Это контракт, т.е. должен оставаться неизменным;
- Нет реализации;
- Может включать методы, свойства, события и индексаторы;
- Все элементы по умолчанию public;
- Это ссылочный тип данных.
Слайд 11Реализация интерфейсов
class Star : IWorkGeom {
public void DoWork() { }
public double SolveGeom()
![Реализация интерфейсов class Star : IWorkGeom { public void DoWork() { }](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/941192/slide-10.jpg)
{return 0;}
public void Move() { }
}
. . .
Star star = new Star();
IWork work = star;
star. work.
DoWork
SolveGeom
Move
DoWork
Слайд 12Явная реализация интерфейса
public interface IWork { void Paint(); }
public interface IDraw { void Paint(); }
class Star
![Явная реализация интерфейса public interface IWork { void Paint(); } public interface](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/941192/slide-11.jpg)
: object, IWork, IDraw {
void IWork.Paint() { }
void IDraw.Paint() { }
}
Важно: - Доступ к методу Paint() возможен только по интерфейсной ссылке;
- Нет модификатора доступа;
- Нет модификаторов abstract, virtual, override, или static;
Слайд 13Интерфейсы, как способ взаимодействия объектов.
Solve()
?
![Интерфейсы, как способ взаимодействия объектов. Solve() ?](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/941192/slide-12.jpg)
Слайд 14Solve()
public interface IWork { void Solve();
}
public class Start {
static void
![Solve() public interface IWork { void Solve(); } public class Start {](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/941192/slide-13.jpg)
Begin(IWork work) {
work.Solve();
}
}
Start.Begin()
1
2
Слайд 15Абстрактный класс и интерфейсы
public interface IDraw {
void Paint();
}
abstract class Star : IDraw
![Абстрактный класс и интерфейсы public interface IDraw { void Paint(); } abstract](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/941192/slide-14.jpg)
{
public abstract void Paint();
. . .
}
Слайд 16Структурный тип и интерфейсы
public interface IMath {
void AddOne();
}
struct Star : IMath {
![Структурный тип и интерфейсы public interface IMath { void AddOne(); } struct](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/941192/slide-15.jpg)
public int num;
public void AddOne() { ++num; }
}
Star star = new Star(); // num=0
star.AddOne(); // num=1
IMath math=star;
math.AddOne();
Console.WriteLine(star.num); // Что будет распечатано?
Слайд 17Стандартный итератор .Net
Все коллекции реализуют интерфейс:
public interface IEnumerable {
IEnumerator GetEnumerator();
}
![Стандартный итератор .Net Все коллекции реализуют интерфейс: public interface IEnumerable { IEnumerator](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/941192/slide-16.jpg)
Который и даёт доступ к итератору:
public interface IEnumerator {
object Current { get; }
bool MoveNext();
void Reset();
}
Слайд 18Работа с файлами и каталогами
File - статические методы для создания, копирования, удаления
![Работа с файлами и каталогами File - статические методы для создания, копирования,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/941192/slide-17.jpg)
и перемещения файлов.
FileInfo - методы экземпляра для создания, копирования, удаления и перемещения файлов.
Directory - статические методы для создания, перемещения и перечисления файлов в каталогах.
DirectoryInfo - методы экземпляра для создания, перемещения и перечисления файлов в каталогах.
Path - методы и свойства для обработки имён каталогов кроссплатформенным способом.
Слайд 19Добавление текста в файл:
string path = @"C:\Users\student\books.txt";
if (File.Exists(path))
File.AppendAllText(path, “some
![Добавление текста в файл: string path = @"C:\Users\student\books.txt"; if (File.Exists(path)) File.AppendAllText(path, “some](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/941192/slide-18.jpg)
text \r\n new line");
Поиск по дереву каталогов:
string path = @"C:\Users\student\Desktop";
string[] books = Directory.GetFiles(path, "*.pdf", SearchOption.AllDirectories);
foreach (string s in books) Console.WriteLine(s);
Слайд 20Потоки байтов
FileStream — для чтения и записи в файл.
MemoryStream — для чтения и
![Потоки байтов FileStream — для чтения и записи в файл. MemoryStream —](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/941192/slide-19.jpg)
записи в память.
BufferedStream — для повышения быстродействия операций чтения и записи.
NetworkStream — для чтения и записи на сетевые сокеты.
PipeStream — для чтения и записи в анонимные и именованные каналы.
CryptoStream — для связи потоков данных с криптографическими алгоритмами.
Слайд 21Чтение байтов из файла:
string path = @"C:\Users\student\books.txt";
FileStream fs = File.OpenRead(path);
![Чтение байтов из файла: string path = @"C:\Users\student\books.txt"; FileStream fs = File.OpenRead(path);](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/941192/slide-20.jpg)
// FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
int ch;
while( (ch = fs.ReadByte()) != -1) Console.Write(char.ConvertFromUtf32(ch));
fs.Close(); // вызывает Dispose(true)
fs.Dispose(); // рекомендуется вызывать именно его
Слайд 22Потоки символов
BinaryReader и BinaryWriter - для чтения и записи простых типов данных, например:
![Потоки символов BinaryReader и BinaryWriter - для чтения и записи простых типов](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/941192/slide-21.jpg)
double.
TextReader и TextWriter - абстрактные базовые классы. Их наследники:
StreamReader и StreamWriter - для чтения и записи текстов с учётом кодировки символов.
StringReader и StringWriter - для чтения и записи символов в строки или из строк.
Слайд 23Чтение текстового файла:
string line;
StreamReader tr = null;
string path =
![Чтение текстового файла: string line; StreamReader tr = null; string path =](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/941192/slide-22.jpg)
@"C:\Users\student\books.txt";
try
{
tr = new StreamReader(path, Encoding.GetEncoding(1251));
while ((line = tr.ReadLine()) != null) Console.WriteLine(line);
}
finally {
if (tr!=null) tr.Dispose();
}
Слайд 24Работа с архивами
ZipArchive — набор сжатых файлов в формате ZIP.
ZipArchiveEntry — сжатый файла
![Работа с архивами ZipArchive — набор сжатых файлов в формате ZIP. ZipArchiveEntry](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/941192/slide-23.jpg)
в архиве.
ZipFile — статические методы для работы с архивом.
ZipFileExtensions — расширяющие методы для работы с архивом.
DeflateStream — для сжатия и распаковки потоков с помощью алгоритма Deflate.
GZipStream — для сжатия и распаковки потоков в формате gzip.