Aracılığıyla paylaş


Nesne ve Koleksiyon Başlatıcıları (C# Programlama Kılavuzu)

Nesne başlatıcıları, oluşturma zamanında ardından atama deyimleri satırları gelecek şekilde bir oluşturucu çağırmak zorunda kalmadan, bir nesnenin istediğiniz erişilebilir alanlarına veya özelliklerine değerler atamanıza olanak tanır.Nesne başlatıcı sözdizimi, bir oluşturucu için bağımsız değişkenler belirtmenize veya bağımsız değişkenleri (ve parantez sözdizimini) atmanıza olanak tanır. Aşağıdaki örnek, türü adlandırılmış bir nesne başlatıcısının, Cat nasıl kullanılacağını ve varsayılan oluşturucunun nasıl çağrılacağını gösterir.Cat sınıfında otomatik olarak uygulanan özelliklerin kullanımına dikkat edin.Daha fazla bilgi için bkz. Otomatik Uygulanan Özellikler (C# Programlama Kılavuzu).

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

Anonim türlerde Nesne Başlatıcıları

Nesne başlatıcıları her bağlamda kullanılabilir olsa da, özellikle LINQ sorgu ifadelerinde kullanışlıdırlar.Sorgu ifadeleri, aşağıdaki bildirimde gösterildiği gibi yalnızca bir nesne başlatıcı kullanılarak başlatılabilen anonim türleri sık sık kullanırlar.

var pet = new { Age = 10, Name = "Fluffy" };

Anonim türler bir LINQ sorgu ifadesindeki select tümcesinin, orijinal sıranın nesnelerini değeri ve şekli orijinalden farklı olabilen nesnelere dönüştürmesine olanak tanır.Bir sıradaki her bir nesneden elde edilen bilgilerin yalnızca bir kısmını depolamak isterseniz, bu kullanışlıdır.Aşağıdaki örnekte, bir ürün nesnesinin (p) birçok alan ve yöntem içerdiğini ve sizin yalnızca ürün adını ve birim fiyatı içeren bir nesne sırası oluşturmakla ilgilendiğinizi varsayalım.

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

Bu sorgu yürütüldüğünde, productInfos değişkeni, bu örnekte gösterildiği gibi bir foreach deyiminde erişilebilen bir nesne sırası içerecektir:

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

Yeni anonim türdeki her bir nesnenin, orijinal nesnedeki özelliklerle veya alanlarla aynı adları alan iki genel özelliği vardır.Ayrıca, anonim bir tür oluştururken bir alanı yeniden adlandırabilirsiniz; aşağıdaki örnek, UnitPrice alanını Price olarak yeniden adlandırır.

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

Boş değer atanabilir tiplerde Nesne Başlatıcıları

Bir nesne başlatıcısını null yapılabilir bir yapıyla birlikte kullanmak bir derleme zamanı hatasıdır.

Koleksiyon başlatıcıları

IEnumerable gerçekleştiren bir koleksiyon sınıfı başlattığınızda, koleksiyon başlatıcıları bir veya birden çok öğe başlatıcısı belirtmenize olanak tanır.Öğe başlatıcıları basit bir değer, bir ifade veya bir nesne başlatıcı olabilir.Bir koleksiyon başlatıcısı kullanarak, kaynak kodunuzdaki sınıfın Add yöntemine birden çok çağrı belirtmeniz gerekmez; derleyici çağrıları ekler.

Aşağıdaki örnekler, iki basit koleksiyon başlatıcısını gösterir:

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() };

Aşağıdaki koleksiyon başlatıcısı, önceki bir örnekte tanımlanan Cat sınıfının nesnelerini başlatmak için nesne başlatıcıları kullanır.Nesne başlatıcıların tek tek küme ayraçları içine alındığına ve virgüllerle ayrıldığına dikkat edin.

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

Koleksiyonun Add yöntemi izin verirse, bir koleksiyon başlatıcısında bir öğe olarak null belirtebilirsiniz.

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

Örnek

// The following code consolidates examples from the topic. 
class ObjInitializers
{
    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.
}

Ayrıca bkz.

Başvuru

Anonim Türler (C# Programlama Kılavuzu)

Kavramlar

C# Programlama Kılavuzu

LINQ Sorgu İfadeleri (C# Programlama Kılavuzu)