Özel koleksiyonları uygulamak için Visual C# kullanma

Bu adım adım makalede, Visual C# içinde özel bir koleksiyonun nasıl uygulandığı gösterilmektedir. Microsoft .NET Framework temel sınıf kitaplıkları, koleksiyon System.Collections.ICollection arabiriminin resmi bir tanımını sunar.

Orijinal ürün sürümü: Visual C#
Özgün KB numarası: 307484

ICollection arabirimini özel bir sınıfta uygulama

Arabirim, ICollection arabirimden devralınır IEnumerable . Arabirimi ICollection bir CopyTo yöntemi ve üç salt okunur özelliği tanımlar: IsSynchronized, SyncRootve Count. ICollectionGetEnumerator yöntemini arabiriminden devralırIEnumerable. Özel bir koleksiyon sınıfı arabirimini ICollection uygulamalıdır.

Arabirimi uygulamak ICollection için şu adımları izleyin:

  1. Visual C# .NET'te bir Windows uygulaması oluşturun.

  2. Çözüm Gezgini proje adına sağ tıklayın, Ekle'nin üzerine gelin ve CustomCollection adlı bir sınıf modülü eklemek için Sınıf Ekle'ye tıklayın.

  3. Ad alanını içeri aktarmak System.Collection için sınıf modülünün başına aşağıdaki örnek kodu ekleyin:

    using System.Collections;
    
  4. Modüldeki diğer kodları aşağıdaki örnek kodla değiştirin:

    public class CustomCollection : ICollection
    {
        private int[] intArr = {1,5,9};
        private int Ct;
    
        public CustomCollection()
        {
            Ct=3;
        }
    }
    

    Kolaylık olması için, CustomCollection sınıfı üç tamsayı öğesi ve bir count değişkeni içeren bir dizi tutar.

  5. CopyTo Parametre olarak bir tamsayı dizisi ve dizin alan yöntemini uygulayın. Bu yöntem, bir koleksiyondaki öğeleri geçirilen dizinden başlayarak diziye kopyalar. Bu yöntemi uygulamak için aşağıdaki kodu ortak CustomCollection oluşturucunun arkasına yapıştırın:

    void ICollection.CopyTo(Array myArr, int index)
    {
        foreach (int i in intArr)
        {
            myArr.SetValue(i,index);
            index = index+1;
        }
    }
    
  6. GetEnumerator arabirimi tarafından devralınan ICollectionIEnumerableyöntemini uygulayın. yöntemi, GetEnumerator bir koleksiyonda yinelenebilir bir Enumerator nesne döndürür. Aşağıdaki örnek kodu yönteminden sonra yapıştırın CopyTo :

    IEnumerator IEnumerable.GetEnumerator()
    {
        return new Enumerator(intArr);
    }
    
  7. Salt okunur üç özelliği uygulamak için aşağıdaki kodu yönteminden GetEnumerator sonra yapıştırın:

    // 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;
        }
    }
    

GetEnumerator yöntemi için bir Numaralandırıcı nesnesi uygulama

Bu bölümde, üzerinden CustomCollectionyineleme yapabilecek bir Enumerator sınıfın nasıl oluşturulacağı gösterilmektedir.

  1. Aşağıdaki örnek kodu sınıf modülünüzdeki son sınıf deyiminden sonra yapıştırın:

    public class Enumerator : IEnumerator
    {
        private int[] intArr;
        private int Cursor;
    }
    

    intArr Yöntemi çağrıldığında sınıfın CustomCollection öğelerini tutmak için özel tamsayı dizisini GetEnumerator bildirin. Alan Cursor üyesi, numaralandırırken geçerli konumu tutar.

  2. parametresiyle intArr bir oluşturucu ekleyin ve yerel intArr olarak bunu ayarlayın. Üye alanının bildiriminden sonra aşağıdaki örnek kodu yapıştırın:

    public Enumerator(int[] intarr)
    {
        this.intArr = intarr;
        Cursor = -1;
    }
    
  3. Reset ve MoveNext yöntemlerini uygulayın. Bunu yapmak için oluşturucunun arkasına aşağıdaki kodu yapıştırın:

    void IEnumerator.Reset()
    {
        Cursor = -1;
    }
    bool IEnumerator.MoveNext()
    {
        if (Cursor < intArr.Length)
            Cursor++;
    
        return(!(Cursor == intArr.Length));
    }
    

    Reset öğesini Cursor-1 olarak ayarlar ve MoveNext öğesini Cursor sonraki öğeye taşır. MoveNext başarılı olursa True döndürür.

  4. tarafından CurrentCursorişaret edilen öğeyi döndüren salt okunur özelliği uygulayın. Cursor-1 ise, bir InvalidOperationExceptionoluşturur. Aşağıdaki kodu yönteminden sonra yapıştırın MoveNext :

    object IEnumerator.Current
    {
        get
        {
            if((Cursor < 0) || (Cursor == intArr.Length))
                throw new InvalidOperationException();
            return intArr[Cursor];
        }
    }
    

Özel koleksiyonda yinelemek için her için kullanma

  1. Form1.cs,Tasarım sekmesinde, forma bir düğme sürükleyin.

  2. Düğmeye çift tıklayın ve düğmenin olayına Click aşağıdaki örnek kodu ekleyin:

    CustomCollection MyCol = new CustomCollection();
    
    foreach (object MyObj in MyCol)
        MessageBox.Show(MyObj.ToString());
    
  3. Uygulamayı çalıştırmak için F5 tuşuna basın ve ardından düğmeye tıklayın.

    Not

    Özel koleksiyondaki öğeleri bir ileti kutusu görüntüler.

Bu nasıl çalışır? Her için nesnesini oluşturmak için yöntemini çağırır GetEnumerator ve yöntemini çağırarak MoveNext öğesini ilk öğeye ayarlarCursor.Enumerator Ardından geçerli özelliğe erişilir ve içindeki öğeyi MyObjalır. Bu, False döndürene kadar MoveNext yinelenir.