Ответ: у одной коллекции может быть несколько перечислителей
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой


рис.1

Пример. На основе структуры Vector создать коллекцию. Коллекция должна перечислять трехмерные координаты вектора (X, Y, Z).

using System;

using System.Collections;

using System.Text;


Class MainEntryPoint

{

static void Main(string[] args)

{

   Vector Vect1 = new Vector(1.0, 2.0, 5.0);

   foreach (double Next in Vect1)

       Console.Write(" " + Next);

   Console.ReadLine();

}

}

Struct Vector : IEnumerable

{

private double x, y, z;

public Vector(double x, double y, double z)

{

   this.x = x; this.y = y; this.z = z;

}

public IEnumerator GetEnumerator()

{

   return new VectorEnumerator(this);

}

private class VectorEnumerator : IEnumerator

{

   Vector theVector;

   int   location;

   public VectorEnumerator(Vector Vect)

   {

       theVector = Vect;

       location = -1;

   }

   public bool MoveNext()

   {

       ++location;

       return (location > 2) ? false : true;

   }

   public object Current

   {

       get

       {

           switch (location)

           {

               case 0:

                   return theVector.x;

               case 1:

                   return theVector.y;

               case 2:

                   return theVector.z;

               default:

                   throw new IndexOutOfRangeException(

                                    "Вышли за границу вектора: " + location);

           }

       }

   }

   public void Reset()

   {

       location = -1;

   }

}

}

Интерфейс ICollection

Интерфейс ICollection является фундаментом, на котором построены все коллекции. Он наследует интерфейс IEnumerable.


рис.2

В интерфейсе ICollection определены следующие свойства:

Свойство Описание
int Count { get; } Количество элементов коллекции в данный момент
bool IsSynchronized { get; } Принимает значение true, если коллекция синхронизирована, и значение false в противном случае. По умолчанию коллекции не синхронизированы. Но для большинства коллекций можно получить синхронизированную версию
object SyncRoot { get; } Объект, для которого коллекция может быть синхронизирована

Методы интерфейса ICollection:

Метод Описание
void CopyTo (             Array target,             int startIdx); Метод копирует содержимое коллекции в массив target, начиная с индекса startIdx.
IEnumerator GetEnumerator(); Метод возвращает перечислитель коллекции (задан интерфейсом IEnumerable).

Интерфейс IList


рис.3


Интерфейс IList наследует интерфейс ICollection и определяет поведение коллекции, доступ к элементам которой разрешен посредством индекса с отсчетом от нуля.

Помимо методов, определенных в интерфейсе ICollection, интерфейс IList определяет и собственные методы (они сведены в табл.).

Некоторые из этих методов служат для модификации коллекции. Если же коллекция предназначена только для чтения или имеет фиксированный размер, вызов этих методов приведет к генерированию исключения типа NotSupportedException.

Дата: 2019-02-02, просмотров: 238.