ایجاد یک کلکسیون

سي شارپ به شما توانايي ايجاد کلکسيون ي از کلاس ها را مي دهد. به عنوان مثال مي توان کلاسي ايجاد کرد که شامل چندين نمونه از کلاس هاي ديگر باشد. اين کلاس خصوصياتي مانند حذف و اضافه  نمونه ها از کلکسيون را دارا مي باشد. به مثال زير توجه کنيد :

using System.Collections;

public class Animal
{
    public string Name { get; set; }
    public int Age { get; set; }
    public double Height { get; set; }

    public Animal(string name, int age, double height)
    {
        Name = name;
        Age = age;
        Height = height;
    }
}

public class Animals : CollectionBase
{
    public void Add(Animal newAnimal)
    {
        List.Add(newAnimal);
    }

    public void Remove(Animal oldAnimal)
    {
        List.Remove(oldAnimal);
    }
}

در مثال بالا دو کلاس تعريف شده است. اولين کلاس، کلاس Animal است که يک عنصر از کلکسيون کلاسمان است. دومين کلاس، کلکسيون کلاسمان است (Animals) که شامل مجموعه اي از اشياء کلاس Animal مي باشد. براي استفاده بهتر از کاربرد کلکسيون ها، کلاسمان از کلاس CollectionBase ارث بري مي کند. به اين نکته توجه کنيد که فضاي نام System.Collections را قسمت تعريف فضاهاي نامي وارد کنيد. کلاس CollectionBase داراي متدهايي مانند ()Add و ()Remove و خاصيت List که مجموعه اي از اشياء را در خود جاي مي دهد، مي باشد. براي حذف يا اضافه کردن اشياء به سادگي مي توان از خاصيت List و متد مربوطه استفاده نمود. متدهاي خاصيت List يک شيء قبول مي کنند نه يک کلاس.بنابراين وقتي که يک ايندکسر تعريف مي کنيم لازم است که ابتدا با استفاده از عمل cast نتيجه را تبديل و سپس آن را به کاربر برگشت دهيم.

public Animal this[int index]
{
   get { return (Animal)List[index]; }
   set { List[index] = value; }
}

با استفاده از کد بالا مي توانيم به هر يک از اشياء کلکسيون بوسيله انديس مکانشان دسترسي يابيم. از آنجاييکه خاصيت List، شي قبول مي کند لازم است که با استفاده از عمل cast آنها را به اشياء Animal تبديل  کنيم. به برنامه زير توجه کنيد :

public class Program
{
    public static void Main()
    {
        Animals animalCollection = new Animals();

        animalCollection.Add(new Animal("Jack", 10, 100));
        animalCollection.Add(new Animal("Sussy", 5, 10));
        animalCollection.Add(new Animal("Frank", 3, 5));

        for (int i = 0; i < animalCollection.Count; i++)
        {
            Console.WriteLine("Animal {0}", i + 1);
            Console.WriteLine("Name: {0}", animalCollection[i].Name);
            Console.WriteLine("Age: {0}", animalCollection[i].Age);
            Console.WriteLine("Height: {0}n", animalCollection[i].Height);
        }
    }
}
Animal 1
Name: Jack
Age: 10
Height: 100

Animal 2
Name: Sussy
Age: 5
Height: 10

Animal 3
Name: Frank
Age: 3
Height: 5

در برنامه بالا يک نمونه از کلاس Animals (animalCollection) و سپس سه نمونه به آن با استفاده از متد ()Add اضافه کرده ايم.سپس با گردش در ميان عناصر با استفاده از يک حلقه نشان داده ايم که مي توان با استفاده از انديس به آنها دست يافت. اين کار را با استفاده از يک حلقه foreach هم مي توان انجام داد:

foreach (Animal animal in animalCollection)
{

}

در درس آينده با generic ها آشنا مي شويد، که راهي آسان براي ايجاد کلکسيوني از هر نوع ، بدون ايجاد کلاسي که از کلاس پايه CollectionBase ارث بري کند، مي باشد.