В настоящее время вы работаете в автономном режиме; ожидается повторное подключение к Интернету

Реализация пользовательских коллекций Visual C#

ВНИМАНИЕ! Данная статья переведена с использованием программного обеспечения Майкрософт для машинного перевода и, возможно, отредактирована посредством технологии Community Translation Framework (CTF). Корпорация Майкрософт предлагает вам статьи, обработанные средствами машинного перевода, отредактированные членами сообщества Майкрософт и переведенные профессиональными переводчиками, чтобы вы могли ознакомиться со всеми статьями нашей базы знаний на нескольких языках. Статьи, переведенные с использованием средств машинного перевода и отредактированные сообществом, могут содержать смысловое, синтаксические и (или) грамматические ошибки. Корпорация Майкрософт не несет ответственности за любые неточности, ошибки или ущерб, вызванные неправильным переводом контента или его использованием нашими клиентами. Подробнее об CTF можно узнать по адресу http://support.microsoft.com/gp/machine-translation-corrections/ru.

Эта статья на английском языке: 307484
Для версии .NET по Visual Basic корпорации Майкрософт в этой статье см. 306961.
C++ .NET Visual Майкрософт версии данной статьи см. 312514.

В данной статье относится к следующее пространство имен библиотеки классов платформа.NET Framework, Майкрософт:
  • System.Collection

В ЭТОЙ ЗАДАЧЕ

Аннотация
В данном пошаговом руководстве показано, как реализовать пользовательскую коллекцию Visual C#. Библиотеки базовых классов платформа.NET Framework предлагает формальное определение коллекции: интерфейс System.Collections.ICollection .

back to the top

Реализация интерфейса ICollection в пользовательском классе

Интерфейс ICollection наследуется от интерфейса IEnumerable . Интерфейс ICollection определяет метод CopyTo и три свойства только для чтения: IsSynchronizedSyncRootи Count. ICollection наследует метод GetEnumerator от интерфейса IEnumerable. Пользовательский класс коллекции должны реализовывать интерфейс ICollection .

Чтобы реализовать интерфейс ICollection , выполните следующие действия.
  1. Создание приложения Windows в Visual .NET на C# или Visual C# 2005.
  2. В обозревателе решений щелкните правой кнопкой мыши имя проекта, укажите пункт Добавитьи выберите команду Добавить класс , чтобы добавить модуль класса с именем CustomCollection.
  3. Добавьте следующий код в начало модуля класса для импорта пространства имен System.Collection :
    using System.Collections;					
  4. Замените другой код в модуль следующий код:
     public class CustomCollection : ICollection{    private int[] intArr = {1,5,9};    private int Ct;    public CustomCollection()    {			Ct=3;    }}						
    Для простоты класс CustomCollection содержит массив с тремя элементами целое число и переменной счетчика.
  5. Реализуйте метод CopyTo , который принимает индекс и массив целых чисел в качестве параметров. Этот метод копирует элементы коллекции в массив, начиная с индекса, переданного. Чтобы реализовать этот метод, вставьте следующий код после открытого конструктора CustomCollection :
    void ICollection.CopyTo(Array myArr, int index){			    foreach (int i in intArr)    {	myArr.SetValue(i,index);	index = index+1;    }}					
  6. Реализуйте метод GetEnumerator , который наследуется от IEnumerable интерфейс ICollection. Метод GetEnumerator возвращает объект перечислителя, который может выполнять итерацию по коллекции. Вставьте следующий код после метода CopyTo .
    IEnumerator IEnumerable.GetEnumerator(){    return new Enumerator(intArr);			  }					
  7. Чтобы реализовать три свойства только для чтения, вставьте следующий код после метода GetEnumerator :
    // The IsSynchronized Boolean property returns True if the // collection is designed to be thread safe; otherwise, it returns False.bool ICollection.IsSynchronized{    get    {         return false;    }}// The SyncRoot property returns an object, which is used for synchronizing // the collection. This returns the instance of the object or returns the // SyncRoot of other collections if the collection contains other collections.// object ICollection.SyncRoot{    get    {	return this;    }}// The Count read-only property returns the number // of items in the collection.int ICollection.Count{    get    {	return Ct;    }}					
back to the top

Реализация объекта перечислителя для метода GetEnumerator

В этом разделе показано, как создать класс перечислителя , который может перемещаться по CustomCollection.
  1. Вставьте следующий код после оператора End Class в модуле класса:
    public class Enumerator : IEnumerator{    private int[] intArr;     private int Cursor;}						
    Объявите массив частная целочисленная intArr для хранения элементов класса CustomCollection при вызове метода GetEnumerator . Член поля курсор содержит текущую позицию при перечислении.
  2. Добавить конструктор с intArr в качестве параметра и значением локальной intArr это. Вставьте следующий код после объявления поля члена.
    public Enumerator(int[] intarr){    this.intArr = intarr;    Cursor = -1;}
  3. Реализуйте методы Reset и MoveNext . Чтобы сделать это, вставьте следующий код после конструктора:
    void IEnumerator.Reset(){    Cursor = -1;}bool IEnumerator.MoveNext(){    if (Cursor < intArr.Length)    Cursor++;    return(!(Cursor == intArr.Length));}						
    Сброс устанавливает курсор в -1 и MoveNext перемещает курсор к следующему элементу. MoveNext возвращает значение True в случае успеха.
  4. Реализуйте Текущее свойство только для чтения, возвращающее элемент, на который указывает курсор. Если указатель равен -1, он выдает исключение InvalidOperationException. Вставьте следующий код после метода MoveNext .
    object IEnumerator.Current{    get    {        if((Cursor < 0) || (Cursor == intArr.Length))	throw new InvalidOperationException();	return intArr[Cursor];    }}					
back to the top

С помощью For Each для перебора коллекции пользовательских

  1. В файле Form1.cs на вкладке конструктора перетащите кнопку в форму.
  2. Дважды щелкните кнопку и добавьте следующий код в событие Click кнопки:
        CustomCollection MyCol = new CustomCollection();		    foreach (object MyObj in MyCol)	MessageBox.Show(MyObj.ToString());					
  3. Нажмите клавишу F5 для запуска приложения, а затем нажмите кнопку. Обратите внимание, что окно сообщения отображает элементы в пользовательской коллекции.
Как это работает? Каждый вызов метода GetEnumerator для создания объекта- перечислителя и вызывает метод MoveNext , чтобы установить курсор на первый элемент. Затем для получения элемента в MyObj осуществляется Текущее свойство. Это продолжается, пока MoveNext возвращает значение False.

back to the top

Внимание! Эта статья переведена автоматически

Свойства

Номер статьи: 307484 — последний просмотр: 11/01/2015 04:28:00 — редакция: 5.0

Microsoft Visual C# .NET 2002 Standard Edition, Microsoft Visual C# 2005

  • kbhowtomaster kbmt KB307484 KbMtru
Отзывы и предложения
t.createElement("meta"); m.content = guid; m.name = "ms.dqid"; document.getElementsByTagName("head")[0].appendChild(m);