Интерфейс ICollection: управление доступом к коллекции

b он является производным от

Вы можете использовать интерфейс ICollection, Чтобы выяснить число существующих в коллекции элементов, копировать элементы коллекции в массив, выяснить, поддерживает ли коллекция синхронизацию для многопоточных сценариев, или получить доступ к синхронизирующему объекту коллекции, чтобы реализовать свою собственную блокировку синхронизации. Это следующий ориентированный на коллекции интерфейс в иерархии наследования после LEnumerable И LEnumerator. Он является производным от LEnumerable, Поэтому для реализации ICollection Нужно реализовать также и LEnumerable. Он вводит несколько элементов, определяющих атрибуты коллекции, помогающие контролировать доступ к элементам коллекции.

Возможно, самым важным и часто используемым элементом, входящим в интерфейс ICollection, Является свойство Count. Если у вас есть коллекция, которая реализует только LEnumerable, То единственным способом выяснить, сколько в ней элементов — это получить перечислитель и и перебрать все элементы, подсчитав их в своем собственном цикле. Писать такого рода код очень скучно и долго, в то время как коллекции, реализующие ICollection, Позволяют пользователям получать число элементов в коллекции прямо из свойства Count, Что возлагает бремя о этого значения на класс-реализатор, как и должно быть.

Метод СоруТо Позволяет потребителю коллекции получить копию всех элементов коллекции в форме типизированного массива, так что он может оперировать этими элементами, не беспокоясь о других потребителях коллекции. Метод принимает два аргумента: ссылку на массив и индекс, указывающий, с какого элемента коллекции должно начинаться копирование. Массив, передаваемый вызывающим, должен иметь тип, подходящий для размещения элементов коллекции, и размер, достаточный для копирования всех элементов, начиная с указанного индекса. Конечно, прежде чем воспользоваться этим методом, вы должны принять во внимание и издержки производительности, связанные с копированием каждого элемента. Если же приемлемо непосредственное манипулирование элементами коллекции, то не стоит и беспокоиться о предварительном их копировании в отдельный массив.

Если коллекция поддерживает одновременный доступ из нескольких потоков, ее нужно синхронизировать. Это означает, что в ней должен быть реализован механизм блокировки, гарантирующий, что не будет возникать состояний «гонок», когда, например, один поток пытается обратиться к элементу коллекции, который был только что удален другим потоком. Детали синхронизации выходят за рамки этой главы, однако есть много других книг, предоставляющих сведения по этой теме.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *