Ö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
, SyncRoot
ve Count
. ICollection
GetEnumerator
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:
Visual C# .NET'te bir Windows uygulaması oluşturun.
Çö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.
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;
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.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 ortakCustomCollection
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; } }
GetEnumerator
arabirimi tarafından devralınanICollection
IEnumerable
yöntemini uygulayın. yöntemi,GetEnumerator
bir koleksiyonda yinelenebilir birEnumerator
nesne döndürür. Aşağıdaki örnek kodu yönteminden sonra yapıştırınCopyTo
:IEnumerator IEnumerable.GetEnumerator() { return new Enumerator(intArr); }
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 CustomCollection
yineleme yapabilecek bir Enumerator
sınıfın nasıl oluşturulacağı gösterilmektedir.
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ınCustomCollection
öğelerini tutmak için özel tamsayı dizisiniGetEnumerator
bildirin. AlanCursor
üyesi, numaralandırırken geçerli konumu tutar.parametresiyle
intArr
bir oluşturucu ekleyin ve yerelintArr
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; }
Reset
veMoveNext
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
öğesiniCursor
-1 olarak ayarlar veMoveNext
öğesiniCursor
sonraki öğeye taşır.MoveNext
başarılı olursa True döndürür.tarafından
Current
Cursor
işaret edilen öğeyi döndüren salt okunur özelliği uygulayın.Cursor
-1 ise, birInvalidOperationException
oluşturur. Aşağıdaki kodu yönteminden sonra yapıştırınMoveNext
: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
Form1.cs,Tasarım sekmesinde, forma bir düğme sürükleyin.
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());
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 MyObj
alır. Bu, False döndürene kadar MoveNext
yinelenir.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin