- •1. Работа с числами
- •2. Представление даты и времени
- •3. Работа со строками и текстом
- •4. Преобразование информации
- •5. Сравнение для выяснения равенства
- •6. Сравнение для выяснения порядка
- •7. Жизненный цикл объектов
- •7.1. Алгоритм сборки мусора
- •7.2. Финализаторы и интерфейс IDisposable
- •7.3. Слабые ссылки
- •8. Перечислители и итераторы
- •9. Стандартные интерфейсы коллекций
- •10. Массивы и класс System.Array
- •11. Типы для работы с коллекциями-списками
- •12. Типы для работы с коллекциями-множествами
- •13. Типы для работы с коллекциями-словарями
- •14. Типы для создания пользовательских коллекций
- •15. Технология LINQ to Objects
- •16. Работа с объектами файловой системы
- •17. Ввод и вывод информации
- •17.1. Потоки данных и декораторы потоков
- •17.2. Адаптеры потоков
- •18. Основы XML и JSON
- •19. Технология LINQ to XML
- •20. Дополнительные возможности обработки XML
- •21. Сериализация времени выполнения
- •22. Сериализация контрактов данных
- •23. Состав и взаимодействие сборок
- •24. Метаданные и получение информации о типах
- •25. Позднее связывание и кодогенерация
- •26. Атрибуты
- •27. Динамическое связывание
- •28. Файлы конфигурации
- •29. Диагностика и мониторинг
- •30. Процессы и домены
- •31. Основы многопоточного программирования
- •32. Синхронизация потоков
- •32.1. Критические секции
- •32.2. Синхронизация на основе подачи сигналов
- •32.3. Неблокирующие средства синхронизации
- •32.4. Разделение данных между потоками
- •33. Выполнение асинхронных операций при помощи задач
- •33.1. Базовые сведения о задачах
- •33.2. Обработка исключений и отмена выполнения задач
- •33.3. Продолжения
- •33.4. Асинхронные функции в C#
- •34. Платформа параллельных вычислений
- •34.1. Параллелизм при императивной обработке данных
- •34.2. Параллелизм при декларативной обработке данных
- •34.3. Коллекции, поддерживающие параллелизм
- •35. Асинхронный вызов методов
- •Литература
IDisposable с единственным методом Dispose(). Если класс или структура реализуют этот интерфейс, Dispose() содержит код освобождения управляемых ресурсов.
public class ClassWithDispose : IDisposable
{
public void DoSomething()
{
Console.WriteLine("I am working...");
}
public void Dispose()
{
// здесь должен быть код освобождения управляемых ресурсов
Console.WriteLine("Bye!");
}
}
Язык C# имеет специальный оператор using, который гарантирует вызов метода Dispose() для заданных переменных в конце блока кода. Синтаксис оператора using следующий:
using (получение-ресурса) вложенный-оператор
Здесь получение-ресурса означает один из вариантов.
1.Объявление и инициализацию локальной переменой (или списка переменных). Тип переменной должен реализовывать IDisposable. Такая переменная
вблоке using доступна только для чтения.
2.Выражение, значение которого имеет тип, реализующий IDisposable. Приведём пример использования оператора using:
using (ClassWithDispose x = new ClassWithDispose())
{
x.DoSomething();
// компилятор C# поместит сюда вызов x.Dispose()
}
7.3. Слабые ссылки
Слабая ссылка (weak reference) – особый вид ссылки на объект в системах со сборкой мусора. Если на объект имеются только слабые ссылки, он рассматривается алгоритмом сборки мусора как подлежащий удалению.
В .NET слабые ссылки представлены классами System.WeakReference и System.WeakReference<T>. Конструктор класса принимает объект, на который создаётся слабая ссылка. Свойство Target указывает на этот объект или имеет значение null, если объект был удалён сборщиком мусора.
var weak = new WeakReference(new StringBuilder("Test"));
25