Добавление к коллекции функций сортировки

прежде всего имеется ряд методов

Реализация сортировки несколько сложнее. Прежде всего, имеется ряд методов и свойств базового класса, которые вы должны переопределить. Кроме того, код и применяемый для сортировки алгоритм с необходимостью несколько более сложны. Имеется четыре свойства, которые требуется переопределить: SupportsSortingCore, IsSortedCore, SortDirection — Соге И SortPropertyCore. Требуется переопределить также два метода: ApplySortCore И RemoveSortCore. Если бы вам просто требовалось поддерживать сортировку коллекции, все было бы не так сложно. Трудность представляет возможность удаления сортировки. Когда вы сортируете коллекцию, вы должны сделать так, чтобы с момента сортировки любой использующий коллекцию код видел ее переупорядоченной. Это означает, что вы должны действительно изменить содержимое коллекции, расположив ее в другом порядке, чтобы любой код, когда он итерирует коллекцию при помощи базовой реализации интерфейса LEnumerator, Видел сортированный порядок. Поскольку требуется поддерживать удаление сортировки, вам нужен также способ вернуть содержимое коллекции обратно к первоначальному порядку. Простейшим способом сделать это является создание копии коллекции в ее несортированном состоянии до применения сортировки, а затем вы можете восстановить исходную коллекцию, когда сортировка удаляется. Однако здесь появляется другой уровень сложности — что будет, если в коллекцию добавляется или из коллекции удаляется элемент в то время, пока она сортирована? Элемент будет добавлен к сортированной коллекции, но если вы не будете перехватывать любые модификации коллекции, новый элемент или удаленный элемент не будет отражен в копии исходной коллекции, которую вы собираетесь восстановить при удалении сортировки.