- •А.А. Волосевич
- •2. Базовые технологии платформы .Net 5
- •2. Базовые технологии платформы .Net 4
- •2. Базовые технологии платформы .Net
- •2.1. Работа с Числами
- •2.2. Дата и время
- •2.3. Работа со строками и текстом
- •2.4. Преобразование информации
- •2.5. Отношения равенства и порядка
- •Сравнение для выяснения равенства
- •Сравнение для выяснения порядка
- •2.6. Жизненный цикл объектов
- •Алгоритм «сборки мусора»
- •Финализаторы и интерфейс iDisposable
- •2.7. Перечислители и итераторы
- •2.8. Интерфейсы стандартных коллекций
- •2.9. Массивы и класс system.Array
- •2.10. Типы для работы с коллекциями-списками
- •2.11. Типы для работы с коллекциями-множествами
- •2.12. Типы для работы с коллекциями-словарями
- •2.13. Типы для создания пользовательских коллекций
- •2.14. Технология linq to objects
- •1. Оператор условия Where().
- •2. Операторы проекций.
- •3. Операторы упорядочивания.
- •4. Оператор группировки GroupBy().
- •5. Операторы соединения.
- •6. Операторы работы с множествами.
- •7. Операторы агрегирования.
- •8. Операторы генерирования.
- •9. Операторы кванторов и сравнения.
- •10. Операторы разбиения.
- •11. Операторы элемента.
- •12. Операторы преобразования.
- •2.15. Работа с объектами файЛовой системы
- •2.16. Ввод и вывод информации
- •Потоки данных и декораторы потоков
- •2. Классы для работы с потоками, связанными с хранилищами.
- •3. Декораторы потоков.
- •4. Адаптеры потоков.
- •Адаптеры потоков
- •2.17. Основы xml
- •2.18. Технология linq to xml
- •Создание, сохранение, загрузка xml
- •Запросы, модификация и трансформация xml
- •Пространства имен xml
- •2.19. ДОполнительные возможности обработки xml
- •2.20. Сериализация
- •Сериализация времени выполнения
- •Сериализация контрактов данных
- •2.21. Состав и взаимодействие сборок
- •2.22. Метаданные и получение информации о типах
- •2.23. Позднее связывание и кодогенерация
- •2.24. Динамические типы
- •2.25. Атрибуты
- •2.26. Файлы конфигуРации
- •2.27. Основы мНогопоточноГо программирования
- •2.28. Синхронизация потоков
- •2.29. Библиотека параллельных расширений
- •Параллелизм на уровне задач
- •Параллелизм при императивной обработке данных
- •Параллелизм при декларативной обработке данных
- •Обработка исключений и отмена выполнения задач
- •Коллекции, поддерживающие параллелизм
- •2.30. Асинхронный вызов методов
- •2.31. Процессы и домены
- •2.32. Безопасность
- •Разрешения на доступ
- •Изолированные хранилища
- •Криптография
- •2.33. Диагностика
2. Базовые технологии платформы .Net
2.1. Работа с Числами
Платформа .NET предлагает набор классов для базовой поддержки работы с числами. Статический класс System.Math содержит набор методов, соответствующих основным математическим функциям. Кроме того, в классе Math определены математические константы и .
Таблица 1
Элементы класса System.Math
Имя элемента |
Описание |
Abs() |
Модуль (функция перегружена для аргумента sbyte, short, int, long, float, double, decimal) |
Acos(), Asin(), Atan() |
Арккосинус, арксинус, арктангенс в радианах для аргумента double. Если указан недопустимый аргумент, возвращается double.NaN |
Atan2() |
Арктангенс, вычисленный по отношению двух аргументов |
BigMul() |
Произведение двух аргументов типа int, имеющее тип long |
Ceiling() |
Наименьшее целое, которое больше или равно указанному аргументу (функция перегружена для аргумента double и decimal) |
Cos(), Sin(), Tan() |
Косинус, синус, тангенс |
Cosh(), Sinh(), Tanh() |
Гиперболические косинус, синус и тангенс |
DivRem() |
Вычисляет частное и остаток при делении двух чисел типа int или long |
E |
Константа |
Exp() |
Экспонента |
Floor() |
Наибольшее целое, которое меньше или равно указанному аргументу (функция перегружена для аргумента double и decimal) |
IEEERemainder() |
Остаток от деления, вычисленный по правилам стандарта IEEE |
Log() |
Логарифм, вычисленный по заданному основанию (или натуральный логарифм, если указан один аргумент) |
Log10() |
Десятичный логарифм |
Max(), Min() |
Наибольшее и наименьшее из двух чисел (функция перегружена для всех числовых типов, кроме char) |
PI |
Константа |
Pow() |
Возводит число в указанную степень |
Round() |
Округление до ближайшего целого. Можно задать дополнительный параметр, определяющий поведение в случае, если аргумент лежит ровно посредине между двумя целыми числами |
Sign() |
Знак числа (-1, 0 или 1) (функция перегружена для аргумента sbyte, short, int, long, float, double, decimal) |
Sqrt() |
Квадратный корень |
Truncate() |
Округление до ближайшего целого числа в направлении нуля |
Класс System.Random генерирует псевдослучайную последовательность значений byte, int или double. Конструктор класса Random перегружен и может принимать целочисленное начальное значение (зерно) для инициализации последовательности псевдослучайных чисел. Применение одинакового зерна гарантирует генерирование одной и той же последовательности, что иногда необходимо в целях отладки. Если зерно явно не указано, используется значение, вычисленное по текущему времени. Метод Next() генерирует случайное целое число, при этом можно задать допустимый интервал. Метод NextDouble() возвращает случайное вещественное число из интервала , а метод NextBytes() заполняет массив байт случайными значениями.
Random r = new Random(1000);
int x = r.Next() + r.Next(100) + r.Next(-10, 10);
double y = r.NextDouble();
byte[] buffer = new byte[10];
r.NextBytes(buffer);
Отметим, что в задачах криптографии следует использовать более сильный генератор случайных чисел, чем Random. Например, в пространстве имён System.Security.Cryptography имеется генератор RandomNumberGenerator:
var rand = RandomNumberGenerator.Create();
byte[] bytes = new byte[32];
rand.GetBytes(bytes); // заполняем массив случайными байтами
Пространство имён System.Numerics содержит две структуры: BigInteger и Complex. Структура BigInteger определяет целое число неограниченной длины. Экземпляр структуры может быть создан на основе строки, массива байт, или путём приведения одного из обычных целых типов. Структура BigInteger выполняет перегрузку основных математических и битовых операций и поддерживает несколько методов, аналогичных имеющимся в классе Math (GreatestCommonDivisor(), Sign(), Abs(), DivRem(), Pow(), Log(), Max(), Min()).
// подсчёт 100!
BigInteger f = BigInteger.One;
for (int i = 2; i <= 100; i++)
{
f *= i;
}
double d = BigInteger.Log10(f); // 100! это примерно 10^158
Структура Complex служит для представления комплексного числа и обладает набором вполне ожидаемых элементов (перегрузка арифметических операций, некоторые математические функции, свойства для действительной и мнимой части, модуля).
Complex z1 = new Complex(3, 5);
Complex z2 = new Complex(-2, 10);
Complex z3 = Complex.Sin(z1/z2); // синус от частного двух чисел
Console.WriteLine(z3.Magnitude); // выведем модуль числа