Aracılığıyla paylaş


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

Anonim türleri açıkça önce bir tür tanımlamak gerekmeden tek bir nesnede salt okunur özellik kümesini kapsülleyen için kolay bir yol sağlar.Tür adı derleyici tarafından oluşturulan ve kaynak kodu düzeyinde kullanılabilir değil.Her bir özellik türü derleyici tarafından algılanır.

Anonim türler kullanarak oluşturduğunuz yeni ile birlikte bir nesne Başlatıcısı işleci.Nesne başlatıcılar hakkında daha fazla bilgi için bkz Nesne ve Koleksiyon Başlatıcıları (C# Programlama Kılavuzu).

Aşağıdaki örnek, adlı iki özelliklerle başlatılan anonim bir türün gösterir Amount ve Message.

var v = new { Amount = 108, Message = "Hello" };

// Rest the mouse pointer over v.Amount and v.Message in the following
// statement to verify that their inferred types are int and string.
Console.WriteLine(v.Amount + v.Message);

Anonim türler genellikle kullanıldığı seçin yan tümcesindeki kaynak sıralamadaki her nesnesinden alt özelliklerin döndürmek için bir sorgu ifadesi.Sorgular hakkında daha fazla bilgi için bkz: LINQ Sorgu İfadeleri (C# Programlama Kılavuzu).

Anonim türler bir veya daha fazla ortak salt okunur özelliklerini içerir.Diğer hiçbir tür yöntemleri veya olayları gibi sınıf üyeleri geçerlidir.Bir özellik başlatmak için kullanılan ifade olamaz null, anonim bir işlevi veya bir işaretçi türü.

En yaygın senaryo başka türünden özellikleri olan anonim bir türün başlatmaktır.Aşağıdaki örnekte, bir sınıf adlı var olduğunu varsayar Product.Sınıf Product içeren Color ve Price ilgilendiğiniz değil diğer özellikleri ile birlikte özellikleri.Değişken products koleksiyonudur Product nesneleri.Anonim tür bildirimi ile başlar new anahtar sözcük.Yalnızca iki özelliklerinden kullanan yeni bir türü bildirimi başlatır Product.Bu, daha küçük bir sorguda döndürülecek veri miktarını neden olur.

Üye adlarının anonim tür belirtmezseniz, derleyici anonim tür üyeleri aynı adı taşıyan bunları başlatmak için kullanılan özellik sunar.Önceki örnekte gösterildiği gibi bir ifade içeren başlatılmış bir özellik için bir ad belirtmeniz gerekir.Aşağıdaki örnekte, adları anonim tür özelliklerinin olan Color ve Price.

var productQuery = 
    from prod in products
    select new { prod.Color, prod.Price };

foreach (var v in productQuery)
{
    Console.WriteLine("Color={0}, Price={1}", v.Color, v.Price);
}

Anonim bir türün bir değişkeni başlatmak için kullandığınızda, tipik olarak, değişken örtülü olarak belirtilmiş bir yerel değişken kullanarak bildirmek var.Tür adı yalnızca derleyici anonim tür adını temel erişimi olduğundan Değişken bildiriminde belirtilemez.var hakkında daha fazla bilgi için bkz. Örtülü Olarak Yazılan Yerel Değişkenler (C# Programlama Kılavuzu).

Aşağıdaki örnekte gösterildiği gibi örtülü olarak belirtilmiş bir yerel değişken ve örtülü olarak belirtilmiş bir dizi birleştirerek anonim olarak belirtilmiş öğeleri dizisi oluşturabilirsiniz.

var anonArray = new[] { new { name = "apple", diam = 4 }, new { name = "grape", diam = 1 }};

Notlar

Anonim türler sınıf doğrudan öğesinden türetilen türler nesne, ve, olamaz dönüştürülür dışında herhangi bir tür için nesne.Uygulamanızı bunu erişemez olsa da derleyici her anonim tür için bir ad sağlar.Ortak dil çalışma zamanı perspektifinden anonim bir türün herhangi diğer bir başvuru türünden farklı değildir.

Bir derlemeyi iki veya daha fazla anonim nesneyi başlatıcılar, aynı sırada olan ve türlere ve aynı adı taşıyan özellikler bir dizi belirtirseniz, derleyici nesneler aynı türde örnekleri değerlendirir.Bunlar aynı derleyici oluşturulan türü bilgilerini paylaşın.

Bir alan, bir özellik, bir olay veya anonim bir türün sahip olarak bir yöntemin dönüş türünü belirtemezsiniz.Benzer şekilde, yöntem, özellik, oluşturucu veya anonim bir türün sahip olarak dizin oluşturucu resmi bir parametre belirtemezsiniz.Anonim bir türün veya bir yöntem bağımsız değişken olarak anonim türleri içeren bir koleksiyon iletmek için parametre türü nesnesi olarak bildirebilirsiniz.Ancak, bunun yapılması, güçlü uramayacak.Sorgu sonuçları depolamak veya bunları dışında yöntemi sınırı aktarın, bir sıradan adlandırılmış yapı ya da sınıf yerine anonim bir türün kullanmayı düşünün.

Çünkü Equals ve GetHashCode yöntemleri anonim türleri açısından, tanımlanmış Equals ve GetHashCode özellikleri, iki örnekleri aynı anonim tür yöntemleri yalnızca tüm özellikleri eşitse eşit.

Ayrıca bkz.

Başvuru

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

Kavramlar

C# Programlama Kılavuzu

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

Diğer Kaynaklar

C#'de LINQ'e Başlarken