Aracılığıyla paylaş


Anonim Türleri (Visual Basic)

Visual Basic veri türüiçin bir sınıf tanımı yazmadan nesneleri oluşturmak için etkinleştirme anonim türleri destekler.Bunun yerine, derleyici sınıf sizin için oluşturur.' % S'sınıfı sınıf kullanılabilir bir ada sahip değil, doğrudan devraldığı Objectve sizin belirlediğiniz nesnebildirmek özelliklerini içerir.veri türü adı belirtilmemiş olduğundan, onu olarak adlandırılmıştır bir anonim tip.

Aşağıdaki örnek bildirir ve bu değişken oluştururproduct iki özelliklere sahip bir anonim tip örneği olarak Name ve Price.

' Variable product is an instance of a simple anonymous type. 
Dim product = New With {Key .Name = "paperclips", .Price = 1.29}

A sorgu ifadesi bir sorgutarafından seçilen veri sütunlarının birleştirmek için anonim türleri kullanır.Belirli bir sorgu seçebilirsiniz sütunları tahmin edemezsiniz çünkü sonuç tipini önceden tanımlanamaz.Anonim türleri sütunlar, herhangi bir sayıda herhangi bir sırada seçer sorgu yazmanıza olanak tanır.derleyici belirtilen özellikleri ve yönetimsel olarak belirtilen sırayla eşleşen bir veri türü oluşturur.

Aşağıdaki örneklerde, products her birinin birçok özelliği olan ürün nesnelerin listesi alınır.Değişken namePriceQuery tutan yürütüldüğünde, iki özelliklere sahip bir anonim tip örnekleri koleksiyon döndüren bir sorgu tanımını Name ve Price.

Dim namePriceQuery = From prod In products
                     Select prod.Name, prod.Price

Değişken nameQuantityQuery tutan yürütüldüğünde, iki özelliklere sahip bir anonim tip örnekleri koleksiyon döndüren bir sorgu tanımını Name ve OnHand.

Dim nameQuantityQuery = From prod In products
                        Select prod.Name, prod.OnHand

anonim tipbir derleyici tarafından oluşturulan kodu hakkında daha fazla bilgi için bkz: Anonim Tür Tanımı (Visual Basic).

Uyarı notuUyarı

anonim tip derleyici oluşturulan ve derleme derleme değişebilir adıdır.Kodunuzu kullanın veya etmemelisiniz adı proje çekirdekler, çünkü bir anonim tip adına dayanır.

Anonim bir türü bildirmek

anonim tip bir örneğini bildirim Başlatıcı Liste türünün özelliklerini belirtmek için kullanır.Özellikleri yalnızca belirttiğiniz zaman tanımlamak anonim tip, yöntemler veya olaylar gibi diğer sınıf öğeleri değil.Aşağıdaki örnekte, product1 iki özelliklere sahip bir anonim tip örneğidir: Name ve Price.

' Variable product1 is an instance of a simple anonymous type. 
Dim product1 = New With {.Name = "paperclips", .Price = 1.29}
' -or- 
' product2 is an instance of an anonymous type with key properties. 
Dim product2 = New With {Key .Name = "paperclips", Key .Price = 1.29}

Özellik anahtar özellik olarak belirlerseniz, eşitlik için iki anonim tip örnekleri karşılaştırmak için kullanabilirsiniz.Ancak, anahtar özelliklerinin değerlerini değiştirilemez.Bu konuda daha fazla bilgi için anahtar özellikleri bölümüne bakın.

Bir anonim tip örneğini bildirmek adlandırılmış türünün bir örneği bir nesne Başlatıcı kullanarak belirtilmesine benzer olduğuna dikkat edin:

' Variable product3 is an instance of a class named Product. 
Dim product3 = New Product With {.Name = "paperclips", .Price = 1.29}

anonim tip özelliklerini belirtmek için diğer yolları hakkında daha fazla bilgi için bkz: Nasıl yapılır: Anonim Türde Bildirimlerden Özellik Adları ve Türlerini Çıkarma (Visual Basic).

Anahtar özellikler

Anahtar özellikleri farklı olmayan gelen-birkaç temel açıdananahtar özellikleri:

  • İki örneğini eşit olup olmadığını belirlemek için yalnızca anahtar özelliklerinin değerlerini karşılaştırılır.

  • anahtar özellikler, değerler salt okunur ve değiştirilemez.

  • Yalnızca anahtar özellik değerleri derleyicidahil- karma kod algoritma bir anonim tipiçin oluşturulan.

Eşitlik

Anonim türlerin örnekleri yalnızca aynı anonim tipörnekleri iseniz eşit olabilir.derleyici aşağıdaki koşulları karşılıyorsa iki tane aynı türden bir örneği kabul eder:

  • Bunlar aynı derlemeiçinde bildirilir.

  • Bunların özelliklerini aynı inferred türleri aynı adı ve aynı sırayla bildirilir.Adı karşılaştırmaları büyük küçük harf duyarlı değildir.

  • Aynı özellikler her anahtar özellik olarak işaretlenir.

  • Her bildirim en az bir özellik anahtarözellik' dir.

Hiçbir anahtar özelliklere sahip bir anonim türleri yalnızca kendisine eşit örneğidir.

' prod1 and prod2 have no key values. 
Dim prod1 = New With {.Name = "paperclips", .Price = 1.29}
Dim prod2 = New With {.Name = "paperclips", .Price = 1.29}

' The following line displays False, because prod1 and prod2 have no 
' key properties.
Console.WriteLine(prod1.Equals(prod2))

' The following statement displays True because prod1 is equal to itself.
Console.WriteLine(prod1.Equals(prod1))

anonim tip aynı iki örneğini kendi anahtar özelliklerin değerlerinin eşit olması durumunda eşit.Aşağıdaki örnekte, eşitlik nasıl sınanır görülmektedir.

Dim prod3 = New With {Key .Name = "paperclips", Key .Price = 1.29}
Dim prod4 = New With {Key .Name = "paperclips", Key .Price = 1.29}
' The following line displays True, because prod3 and prod4 are 
' instances of the same anonymous type, and the values of their 
' key properties are equal.
Console.WriteLine(prod3.Equals(prod4))

Dim prod5 = New With {Key .Name = "paperclips", Key .Price = 1.29}
Dim prod6 = New With {Key .Name = "paperclips", Key .Price = 1.29,
                      .OnHand = 423}
' The following line displays False, because prod5 and prod6 do not  
' have the same properties.
Console.WriteLine(prod5.Equals(prod6))

Dim prod7 = New With {Key .Name = "paperclips", Key .Price = 1.29,
                      .OnHand = 24}
Dim prod8 = New With {Key .Name = "paperclips", Key .Price = 1.29,
                      .OnHand = 423}
' The following line displays True, because prod7 and prod8 are 
' instances of the same anonymous type, and the values of their 
' key properties are equal. The equality check does not compare the 
' values of the non-key field.
Console.WriteLine(prod7.Equals(prod8))

Salt okunur değerler

anahtar özelliklerinin değerlerini değiştirilemez.Örneğin, prod8 önceki örnekte, Name ve Price alanlar read-only, ama OnHand değiştirilebilir.

        ' The following statement will not compile, because Name is a key 
        ' property and its value cannot be changed. 
        ' prod8.Name = "clamps" 

        ' OnHand is not a Key property. Its value can be changed.
        prod8.OnHand = 22

Sorgu ifadelerini anonim türlerinden

Her zaman sorgu ifadelerini anonim türler oluşturulmasını gerektirmez.Mümkün olduğunda, sütun veri saklamak için varolan bir türünü kullanın.Bu durum, sorgu veri kaynağıveya her kayıttaki tek bir alan ya da bütün kayıtları döndürür oluşur.Aşağıdaki kod örnekleri de customers nesnelerinin bir koleksiyon olup bir Customer sınıf. sınıf birçok özelliği vardır ve herhangi bir sırada sorgu sonuç birini veya birkaçını içerebilir.İlk iki örneklerde, anonim tür sorgular adlandırılmış türlerinin öğeleri seçmek için gereklidir:

  • custs1çünkü dizeleri, bir koleksiyon içeren cust.Name bir dizedir.

    Dim custs1 = From cust In customers
                 Select cust.Name
    
  • custs2koleksiyon içeren Customer nesneleri, çünkü her öğe, customers olan bir Customer nesneve tüm öğe sorgutarafından seçilen.

    Dim custs2 = From cust In customers
                 Select cust
    

Ancak, uygun adlandırılmış türleri her zaman kullanılabilir değil.Bir amaç, müşteri kimlik numaraları ve konumları ve müşteri adları, adresleri ve sipariş geçmişi için üçüncü bir müşteri adları ve adresleri seçmek isteyebilirsiniz.Anonim türleri ilk sonucu tutacak yeni bir adlandırılmış türü bildirmek olmadan herhangi bir sırada özellikleri, herhangi bir bileşimini seçmek etkinleştirin.Bunun yerine, derleyici özelliklerinin her derleme bir anonim tip oluşturur.Aşağıdaki sorgu müşteriadı ve kimlik numarası her birini seçer Customer nesne customers. Bu nedenle, derleyici bu iki özellik içeren bir anonim tip oluşturur.

Dim custs3 = From cust In customers
             Select cust.Name, cust.ID

Hem adları hem de anonim tip özelliklerini veri türlerini bağımsız'dan alınır Select, cust.Name ve cust.ID.Bir sorgu tarafından oluşturulmuş bir anonim tip özelliklerini her zaman anahtar özellikleridir.Zaman custs3 aşağıdaki yürütülen For Each döngü, sonucu olan iki anahtar özelliklere sahip bir anonim tip örnekleri koleksiyon Name ve ID.

For Each selectedCust In custs3
    Console.WriteLine(selectedCust.ID & ": " & selectedCust.Name)
Next

Temsil ettiği koleksiyon öğeleri custs3 kesinlikle yazılan ve IntelliSense kullanılabilen özelliklerin gidin ve bunların türleri doğrulamak için kullanabilirsiniz.

Daha fazla bilgi için bkz. Visual Basic'de LINQ'e Giriş.

Anonim türlerini kullanmaya karar verme

oluşturmak önce bir ' % s'nesne nesne anonim bir sınıförneği olarak, en iyi seçenek olup olmadığını göz önünde bulundurun.Örneğin, ilgili veri içeren geçici bir nesne oluşturmak istediğiniz ve diğer alanları ve yöntemleri tam sınıf içerebilecek gerek varsa, bir anonim tip iyi bir çözümolur.Anonim türleri her bildirimözelliklerinin farklı bir seçim istiyorsanız veya özelliklerinin sırasını değiştirmek istiyorsanız kullanışlıdır.proje sabit bir sırada aynı özelliklere sahip birçok nesne varsa, ancak tanımlamak yapabilirsiniz daha kolay kullanarak adlandýrýlmýþ bir tür sınıfoluşturucuile onları. Örneğin, bir uygun oluşturucu, tanımlamak kolaydır çeşitli örneklerini bir Product sınıf daha olduğunu tanımlamak için çeşitli örneklerini bir anonim tip.

' Declaring instances of a named type. 
Dim firstProd1 As New Product("paperclips", 1.29)
Dim secondProd1 As New Product("desklamp", 28.99)
Dim thirdProd1 As New Product("stapler", 5.09)

' Declaring instances of an anonymous type. 
Dim firstProd2 = New With {Key .Name = "paperclips", Key .Price = 1.29}
Dim secondProd2 = New With {Key .Name = "desklamp", Key .Price = 28.99}
Dim thirdProd2 = New With {Key .Name = "stapler", Key .Price = 5.09}

Adlandırılmış türlerinin başka bir avantajı, derleyici bir kaza yanlış yazmanız özellik adını catch olmasıdır.Önceki örneklerde, firstProd2, secondProd2, ve thirdProd2 aynı anonim tipörnekleri olması amaçlanır.Ancak, yanlışlıkla tanımlamak için olsaydıthirdProd2 aşağıdaki yollardan birinde türünü değerinden farklı olurdu firstProd2 ve secondProd2.

' Dim thirdProd2 = New With {Key .Nmae = "stapler", Key .Price = 5.09} 
' Dim thirdProd2 = New With {Key .Name = "stapler", Key .Price = "5.09"} 
' Dim thirdProd2 = New With {Key .Name = "stapler", .Price = 5.09}

Daha da önemlisi, adlandırılmış türlerin örnekleri için uygulamak yapmak anonim türleri kullanımında sınırlamalar vardır.firstProd2, secondProd2, ve thirdProd2 aynı anonim tipörnekleridir.Ancak, paylaşılan anonim tip adı kullanılamıyor ve burada bir tür adıyla kodunuzda beklenen bulunamaz.Örneğin, bir anonim tip yöntem imza tanımlamak için başka bir değişken veya alantanımlamak veya bildirimyazın için kullanılamaz.Sonuç olarak, yöntemler arasında bilgi paylaşmanın olduğunda anonim türleri uygun değildir.

Anonim tür tanımı

anonim tipbir örneğini bildirim yanıtta belirtilen özellikler içeren yeni bir sınıf tanımı derleyici oluşturur.

anonim tip en az bir anahtarözellikiçeriyorsa, devralınan üç üye tanımı geçersiz kılar Object: Equals, GetHashCode, ve ToString. Kod, eşitlik sınamak ve karma kod değeri yalnızca anahtar özellikleri dikkate belirlenmesi için üretilen.anonim tip hiçbir anahtar , yalnızca özellikler içeriyorsa, ToString geçersiz kılınır.Bir anonim tip açıkça adlandırılmış özellikleri ile oluşturulan bu yöntemler çakışmamalıdır.Diğer bir deyişle, kullanamazsınız .Equals, .GetHashCode, veya .ToString bir özellikadı vermek.

En az bir anahtarözellik olan anonim tür tanımları da uygulamak IEquatable arabirim, burada T anonim tiptürüdür.

derleyici ve işlevselliğini geçersiz kılınmış yöntemler tarafından oluşturulan kodu hakkında daha fazla bilgi için bkz: Anonim Tür Tanımı (Visual Basic).

Ayrıca bkz.

Görevler

Nasıl yapılır: Anonim Türde Bildirimlerden Özellik Adları ve Türlerini Çıkarma (Visual Basic)

Başvuru

Anahtar (Visual Basic)

Kavramlar

Nesne Başlatıcıları: Adlandırılmış ve Anonim Türler (Visual Basic)

Yerel Türü Arabirimi (Visual Basic Başvurusu)

Visual Basic'de LINQ'e Giriş

Anonim Tür Tanımı (Visual Basic)