Aracılığıyla paylaş


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

Nesne başlatıcılar, tek bir ifade kullanarak karmaşık bir nesne özelliklerini belirtmenize olanak verir.Adlandırılmış türlerinin ve anonim türleri örnekleri oluşturmak için kullanılabilir.

Bildirimleri

Adlandırılmış ve anonim türlerin örnekleri ile ilgili bildirimler neredeyse aynı görünebilir, ancak etkileri aynı değildir.Her kategorinin yeteneklerini ve kendi sınırlamaları vardır.Aşağıdaki örnek, bildirmek ve adlandırılmış bir sınıfın örneğini başlatmak için kullanışlı bir yol gösterir Customer, nesne Başlatıcı listesi kullanarak.Sınıfın adını sonra anahtar sözcüğünün belirtilmesini dikkat edin New.

Dim namedCust = New Customer With {.Name = "Terry Adams"}

Anonim bir tür kullanılabilir adı yok.Bu nedenle anonim bir türünün bir örneğini oluşturmada bir sınıf adı içeremez.

Dim anonymousCust = New With {.Name = "Hugo Garcia"}

Gereksinimleri ve sonuçları iki bildirimlerinin aynı değildir.İçin namedCust, bir Customer olan sınıf bir Name özelliği önceden mevcut olmalıdır ve bildirimin bu sınıfın bir örneğini oluşturur.İçin anonymousCust, derleyici bir özellik adı verilen bir dize içeren yeni bir sınıfı tanımlar Nameve o sınıfın yeni bir örneğini oluşturur.

Adlandırılmış türleri

Nesne başlatıcılar bir yapıcıyı çağırır ve sonra tek bir deyimde bazı veya tüm özelliklerin değerlerini ayarlamak için basit bir yol sağlar.For ifadesinin uygun yapıcı derleyici çağırır: bağımsız değişken olmadan alırsanız varsayılan kurucu ya da bir veya daha fazla bağımsız değişken gönderilirse parametreli bir kurucu.Belirtilen özelliklerin bundan sonra başlatıcı listesinde verildikleri sırayla başlatılır.

Başlatıcı listesindeki her başlatma sınıf üyesi için bir başlangıç değeri atamayı oluşur.Sınıf tanımlandığında adları ve veri türleri üyelerinin belirlenir.Aşağıdaki örneklerde, Customer sınıf gerekir mevcut ve üyeleri adlı sahip Name ve City dize değerlerini kabul edebilir.

Dim cust0 As Customer = New Customer With {.Name = "Toni Poe", 
                                           .City = "Louisville"}

Alternatif olarak, aşağıdaki kodu kullanarak aynı sonucu elde edebilirsiniz:

Dim cust1 As New Customer With {.Name = "Toni Poe", 
                                .City = "Louisville"}

Her biri bu bildirimleri oluşturur bir aşağıdaki örnek eşdeğer bir Customer nesne varsayılan kurucuyu kullanarak ve başlangıç değerlerini belirtir Name ve City özelliklerini kullanarak bir With deyimi.

Dim cust2 As New Customer()
With cust2
    .Name = "Toni Poe"
    .City = "Louisville" 
End With

Customer Sınıfı için bir değer göndermenizi sağlayan bir parametreli kurucu içerir Name, örneğin, ayrıca bildirmek başlatmak ve bir Customer aşağıdaki şekillerde nesnesi:

Dim cust3 As Customer = 
    New Customer("Toni Poe") With {.City = "Louisville"}
' --or-- 
Dim cust4 As New Customer("Toni Poe") With {.City = "Louisville"}

Aşağıdaki kodun gösterdiği gibi tüm özellikleri başlatmak gerekmez.

Dim cust5 As Customer = New Customer With {.Name = "Toni Poe"}

Ancak, başlatma listesi boş olamaz.Başlatılmamış özellikleri varsayılan değerlerini korur.

Adlandırılmış türleriyle türü kesmesi

Bildirimi kodunu kısaltabilir cust1 nesne başlatıcılar ve yerel tür kesmesi birleştirerek.Bu, atlamak sağlar As yan tümcesinde değişken tanımlaması.Değişkenin veri türü atama tarafından oluşturulan nesne türü tarafından algılanır.Aşağıdaki örnekte, tür cust6 olan Customer.

Dim cust6 = New Customer With {.Name = "Toni Poe", 
                               .City = "Louisville"}

Adlandırılmış türleri hakkında açıklamalar

  • Bir sınıf üyesi nesne Başlatıcı listesinde birden çok kez başlatılamaz.Bildiriminde, cust7 bir hata neden olur.

    '' This code does not compile because Name is initialized twice. 
    ' Dim cust7 = New Customer With {.Name = "Toni Poe",  
    '                                .City = "Louisville", 
    '                                .Name = "Blue Yonder Airlines"}
    
  • Bir üye veya başka bir alanda başlatmak için kullanılabilir.Bu, aşağıdaki gibi başlatıldıktan sonra üye eriştiyseniz cust8, varsayılan değer kullanılacak.Bir nesne Başlatıcı kullanan bir bildirimi işlendiğinde olacağını ilk şey uygun kurucusu çağrılır olduğunu unutmayın.Bundan sonra başlatıcı listesi tek tek alanları başlatılır.Aşağıdaki örneklerde, varsayılan değer için Name için atanmış cust8, başlatılmamış bir değer atanır cust9.

    Dim cust8 = New Customer With {.Name = .Name & ", President"}
    Dim cust9 = New Customer With {.Name = "Toni Poe", 
                                   .Title = .Name & ", President"}
    

    Aşağıdaki örnek kullanır parametreli kurucusundan cust3 ve cust4 bildirmek ve başlatmak için cust10 ve cust11.

    Dim cust10 = New Customer("Toni Poe") With {.Name = .Name & ", President"}
    ' --or-- 
    Dim cust11 As New Customer("Toni Poe") With {.Name = .Name & ", President"}
    
  • Nesne başlatıcılar iç içe olabilir.Aşağıdaki örnekte, AddressClass iki özelliklere sahip bir sınıf olan City ve Stateve Customer sınıfı olan bir Address örneğidir özelliği AddressClass.

    Dim cust12 = 
        New Customer With {.Name = "Toni Poe", 
                           .Address = 
                               New AddressClass With {.City = "Louisville", 
                                                      .State = "Kentucky"}}
    Console.WriteLine(cust12.Address.State)
    
  • Başlatma listesi boş olamaz.

  • Başlatılmış örnek nesne türünde olamaz.

  • Başlatılmış sınıf üyeleri paylaşılan üyeleri, salt okunur üyeleri, sabitleri veya yöntem çağrıları olamaz.

  • Başlatılmış sınıf üyesi yetkili veya dizinlenemez.Aşağıdaki örnekler, derleyici hataları Yükselt:

    '' Not valid.

    ' Dim c1 = New Customer With {.OrderNumbers(0) = 148662}

    ' Dim c2 = New Customer with {.Address.City = "Springfield"}

Anonim türleri

Anonim türleri nesne başlatıcılar değil açıkça tanımladığınız yeni türleri ve adı örneklerini oluşturmak için kullanın.Bunun yerine, derleyici bir türüne göre belirleyeceğiniz özellikleri nesne Başlatıcı listesi oluşturur.Türün adı belirtilmemiş olduğundan, onu olarak adlandırılmıştır bir anonim tür.Örneğin, aşağıdaki bildiriyi için önceki bir karşılaştırma cust6.

Dim cust13 = New With {.Name = "Toni Poe", 
                       .City = "Louisville"}

Tek fark, sözdizimsel olarak sonra adı belirtilir ise New veri türü.Ancak, neler oldukça farklıdır.İki özelliklere sahip yeni bir anonim tür derleyici tanımlar Name ve Cityve belirtilen değerlerle bir örneğini oluşturur.Tür kesmesi türlerini belirler Name ve City dize olarak örnekte.

Uyarı notuUyarı

Anonim tür adını derleyici tarafından oluşturulan ve derleme derleme değişebilir.Kodunuzu kullanın veya etmemelisiniz anonim bir tür adına dayanır.

Türün adı kullanılabilir olmadığı için kullanamazsınız bir As bildirmek için yan cust13.Kendi türüne olayla gerekir.Geç bağlama kullanmadan, bu yerel değişkenler için anonim türlerinin kullanımını sınırlar.

Anonim türleri sağlamak için önemli destek LINQ sorgular.Sorgularda anonim türleri kullanımı hakkında daha fazla bilgi için bkz: Anonim Türleri (Visual Basic) ve Visual Basic'de LINQ'e Giriş.

Anonim türleri hakkında açıklamalar

  • Genellikle, tüm veya anonim tür bildiriminde birçok anahtar sözcük yazarak belirtilen anahtar özellikleri olur Key özellik adının önünde.

    Dim anonymousCust1 = New With {Key .Name = "Hugo Garcia", 
                                   Key .City = "Louisville"}
    

    Anahtar özellikleri hakkında daha fazla bilgi için bkz: Anahtar (Visual Basic).

  • Anonim tür tanımları en az bir özellik bildirmek gerekir için Başlatıcı liste türleri gibi adlı.

    Dim anonymousCust = New With {.Name = "Hugo Garcia"}
    
  • Anonim bir türünün bir örneği bildirildiğinde, derleyici eşleşen bir anonim tür tanımı oluşturur.Adları ve veri türleri özellikleri örnek bildirimde alınır ve tanımında derleyici tarafından dahil edilir.Özellikler değil adlı ve adlandırılmış bir yazısında olurdu gibi önceden tanımlanmış.Bunların türlerini algılanır.Özellikler veri türlerini kullanarak belirtemezsiniz bir As yan tümcesi.

  • Anonim türleri de adlarını ve değerlerini özelliklerini diğer birçok şekilde kurabilirsiniz.Örneğin, bir anonim tür özelliği hem ad ve değer veya bir değişken adı ve başka bir nesnenin bir özelliğin değerini alabilir.

    ' Create a variable, Name, and give it an initial value. 
    Dim Name = "Hugo Garcia" 
    
    ' Variable anonymousCust2 will have one property, Name, with  
    ' "Hugo Garcia" as its initial value. 
    Dim anonymousCust2 = New With {Key Name}
    
    ' The next declaration uses a property from namedCust, defined 
    ' in an earlier example. After the declaration, anonymousCust3 will 
    ' have one property, Name, with "Terry Adams" as its value. 
    Dim anonymousCust3 = New With {Key namedCust.Name}
    

    Anonim türleri özelliklerini tanımlamak için seçenekleri 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).

Ayrıca bkz.

Görevler

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

Nasıl yapılır: Nesne Başlatıcı Kullanarak Bir Nesne Bildirme (Visual Basic)

Başvuru

Anahtar (Visual Basic)

Kavramlar

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

Anonim Türleri (Visual Basic)

Visual Basic'de LINQ'e Giriş