рис.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, просмотров: 269.