مهيآت الكائنات والمجموعات (دليل البرمجة لـ #C)

تتيح مهيآت الكائنات لك تعيين القيم لأي حقول يمكن الوصول إليها أو خصائص كائن في وقت الإنشاء دون الحاجة إلى استدعاء الدالة الإنشائية بوضوح. يظهر المثال التالي كيفية استخدام مهيئ الكائن بنوع مسمى Cat. لاحظ استخدام خصائص التنفيذ التلقائي في فئة Cat. لمزيد من المعلومات، راجع الخصائص تلقائية التنفيذ (دليل البرمجة لـ #C).

private class Cat
{
    // Auto-implemented properties.
    public int Age { get; set; }
    public string Name { get; set; }
}
Cat cat = new Cat { Age = 10, Name = "Fluffy" };

مهيآت الكائنات مع الأنواع المجهولة

على الرغم من أنه يمكن استخدام مهيآت الكائن في أي سياق, إنما هي مفيدة بشكل خاص في تعبيرات استعلامات LINQ. تقوم تعبيرات الاستعلام باستخدام الأنواع المجهولة بكثرة يمكن فقط تهيئتها بمهيئ كائن. في جملة select يمكن لأي تعبير استعلام تحويل كائنات التسلسلات الأصلية إلى كائنات ذات قيمة وشكل قد تختلف من الأصلية. وهذا مفيد جداً إذا كنت تريد تخزين جزء من المعلومات في كل كائن في تسلسل ما. في المثال التالي، افترض أن كائن منتج (p) تحتوي على العديد من الأساليب والحقول وتهمك فقط إنشاء تسلسل كائنات تحتوي على اسم المنتج وسعره.

var productInfos =
    from p in products
    select new { p.ProductName, p.UnitPrice };

عند تنفيذ هذا الاستعلام، سيحتوي المتغير productInfos على تسلسل كائنات يمكن الوصول إليها في عبارة foreach كما هو موضح في هذا المثال:

foreach(var p in productInfos){...}

لكل كائن في النوع المجهول خاصيتين عامتين تستقبل نفس أسماء الخصائص أو الحقول في الكائنات الأصلية. يمكنك أيضاً إعادة تسمية حقل عند إنشاء نوع مجهول; المثال التالي يعيد تسمية الحقل UnitPrice إلى Price.

select new {p.ProductName, Price = p.UnitPrice};

مهيآت الكائنات بأنواع قابلة للقيم الخالية

من أخطاء وقت الترجمة استخدام مهيآت المجموعات ببنية تقبل القيم الخالية.

مهيآت المجموعات

مهيآت المجموعات تسمح لك بتحديد مهيآت عنصر أو أكثر عند تهييء فئة مجموعة تطبق IEnumerable. يمكن لمهيآت عناصر بأن تكون قيم بسيطة أو تعبير أو مُهيئ كائن. باستخدام مُهيئ المجموعات لا يجب تحديد عدة استدعاءات إلى أسلوب Add من الفئة الموجودة في تعليماتك البرمجية للمصدر; يضيف المحول البرمجي الاستدعاءات.

تعرض الأمثلة التالية مهيئين مجموعات بسيطين:

    List<int> digits = new List<int> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    List<int> digits2 = new List<int> { 0 + 1, 12 % 3, MakeInt() };

يستخدم مُهيئ المجموعة التالي مهيئ الكائن ليهيّئ كائنات من فئة Cat تم تعريفه في مثال سابق. لاحظ أن مهيآت الكائنات الفردية يتم إحاطتها في أقواس وتكون مفصولة بفواصل.

List<Cat> cats = new List<Cat>
{
    new Cat(){ Name = "Sylvester", Age=8 },
    new Cat(){ Name = "Whiskers", Age=2 },
    new Cat(){ Name = "Sasha", Age=14 }
};

يمكنك تحديد null كعنصر في مُهيئ المجموعة إذا كان أسلوب المجموعة Add يسمح لها.

List<Cat> moreCats = new List<Cat>
{
    new Cat(){ Name = "Furrytail", Age=5 },
    new Cat(){ Name = "Peaches", Age=4 },
    null
};

مثال

// The following code consolidates examples from the topic.
class ObjInitializers
{
    private class Cat
    {
        // Auto-implemented properties.
        public int Age { get; set; }
        public string Name { get; set; }
    }

    static void Main()
    {
        Cat cat = new Cat { Age = 10, Name = "Fluffy" };

        List<Cat> cats = new List<Cat>
        {
            new Cat(){ Name = "Sylvester", Age=8 },
            new Cat(){ Name = "Whiskers", Age=2 },
            new Cat(){ Name = "Sasha", Age=14 }
        };

        List<Cat> moreCats = new List<Cat>
        {
            new Cat(){ Name = "Furrytail", Age=5 },
            new Cat(){ Name = "Peaches", Age=4 },
            null
        };

        // Display results.
        System.Console.WriteLine(cat.Name);

        foreach (Cat c in cats)
            System.Console.WriteLine(c.Name);

        foreach (Cat c in moreCats)
            if (c != null)
                System.Console.WriteLine(c.Name);
            else
                System.Console.WriteLine("List element has null value.");
    }
    // Output:
    //Fluffy
    //Sylvester
    //Whiskers
    //Sasha
    //Furrytail
    //Peaches
    //List element has null value.
}

راجع أيضًا:

المرجع

الأنواع المجهولة (ارشادات برمجة C#)

المبادئ

دليل البرمجة لـ #C

LINQ استعلام التعبيرات (C# البرمجة الدليل)