Sdílet prostřednictvím


Inicializátory objektů: pojmenované a anonymní typy (Visual Basic)

Objekt Inicializátory umožňují určit vlastnosti pro složitější objekt jeden výraz.Jejich lze použít k vytvoření instance pojmenované typy a anonymní typy.

Prohlášení

Prohlášení instance pojmenovanou a anonymní typy může vypadat téměř shodné, ale jejich účinky nejsou stejné.Každá kategorie má schopnosti a omezení své vlastní.Následující příklad ukazuje pohodlný způsob, jak deklarovat a inicializaci instance třídy pojmenované Customer, pomocí seznamu inicializátor objektu.Všimněte si, že je název třídy určené za klíčovým slovem New.

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

Anonymní typ nemá žádný název použitelné.Instanci anonymní typ nelze proto obsahovat název třídy.

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

Požadavky a výsledky dvě prohlášení nejsou stejné.Pro namedCust, Customer třídy, která má Name vlastnost musí existovat a prohlášení vytvoří instanci třídy.Pro anonymousCust, kompilátor definuje nové třídy, která má jednu vlastnost řetězce se nazývá Namea vytvoří novou instanci třídy.

Pojmenované typy

Inicializátory objektů poskytuje jednoduchý způsob volání konstruktoru typu a poté nastavte hodnoty některé nebo všechny vlastnosti v jediném příkazu.Kompilátor vyvolá odpovídající konstruktor pro výkaz: výchozí konstruktor, pokud jsou předloženy žádné argumenty, nebo s parametry konstruktoru, pokud jeden nebo více argumentů jsou odesílány.Poté jsou zadané vlastnosti inicializovány v pořadí, ve kterém jsou uvedeny v seznamu inicializátor.

Každý Inicializace seznamu inicializátor obsahuje přiřazení počáteční hodnotu člena třídy.Názvy a datové typy členů jsou určeny při definování třídy.V následujících příkladech Customer třídy musí existovat a musí mít členové název Name a City , může přijmout řetězec hodnoty.

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

Stejného výsledku můžete získat také pomocí následujícího kódu:

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

Každý z těchto prohlášení v následujícím příkladu vytvoří odpovídá Customer objektu pomocí výchozí konstruktor a pak určuje počáteční hodnoty Name a City vlastnosti pomocí With prohlášení.

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

Pokud Customer třída obsahuje konstruktor s parametry umožňující odeslat hodnotu pro Name, například můžete také deklarovat a inicializovat Customer objektu následujícími způsoby:

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

Nemáte inicializovat všechny vlastnosti, jak ukazuje následující kód.

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

Inicializace seznamu však nemůže být prázdný.Neinicializované vlastnosti zachovat výchozí hodnoty.

Odvození typu s názvem typy

Zkrátit kód pro prohlášení o cust1 Inicializátory objektů a odvození typu místní.To umožňuje vynechat As klauzule v deklaraci proměnné.Typ dat proměnné je odvodit z typu objektu, který je vytvořen podle přiřazení.V následujícím příkladu typ cust6 je Customer.

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

Pojmenované typy poznámky

  • Člen třídy nelze inicializovat více než jednou v seznamu objektů inicializátor.Prohlášení o cust7 způsobí chybu.

    '' This code does not compile because Name is initialized twice. 
    ' Dim cust7 = New Customer With {.Name = "Toni Poe",  
    '                                .City = "Louisville", 
    '                                .Name = "Blue Yonder Airlines"}
    
  • Člen lze inicializovat sám nebo jiného pole.Pokud člen zobrazují před ji byla inicializována, jako v následujícím prohlášení o cust8, bude použita výchozí hodnota.Nezapomeňte, že při zpracování prohlášení, který používá objekt inicializátor první věc, která se stane je, že je vyvoláno odpovídající konstruktor.Poté jsou inicializovány jednotlivá pole v seznamu inicializátor.V následujících příkladech je výchozí hodnota pro Name je přiřazen pro cust8, a je inicializována hodnota přiřazena v cust9.

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

    Následující příklad používá s parametry konstruktoru z cust3 a cust4 deklarovat a inicializace cust10 a cust11.

    Dim cust10 = New Customer("Toni Poe") With {.Name = .Name & ", President"}
    ' --or-- 
    Dim cust11 As New Customer("Toni Poe") With {.Name = .Name & ", President"}
    
  • Inicializátory objektů mohou být vnořené.V následujícím příkladu AddressClass je třída, která má dvě vlastnosti City a Statea Customer třída má Address vlastnost, která je instancí AddressClass.

    Dim cust12 = 
        New Customer With {.Name = "Toni Poe", 
                           .Address = 
                               New AddressClass With {.City = "Louisville", 
                                                      .State = "Kentucky"}}
    Console.WriteLine(cust12.Address.State)
    
  • Inicializace seznamu nemůže být prázdný.

  • Typ objektu nemůže být instance inicializován.

  • Sdílené členy, členy jen pro čtení, konstanty nebo volání metody, nemůže být členy třídy inicializován.

  • Členy třídy inicializaci nelze indexovat nebo kvalifikované.Následující příklady zvýšení chyby kompilátoru:

    '' Not valid.

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

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

Anonymní typy

Anonymní typy Inicializátory objektů slouží k vytvoření nové typy, které nejsou explicitně definovat a název instance.Místo toho Kompilátor generuje typu podle vlastnosti, kterou určíte v seznamu objektů inicializátor.Protože není zadán název typu, se nazývá anonymní typ.Například porovnat prohlášení starší jeden pro cust6.

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

Jediný rozdíl je syntakticky, že není zadán žádný název po New datového typu.Co se stane se však značně liší.Kompilátor definuje nové anonymní typ, který má dvě vlastnosti, Name a Citya vytvoří instanci se zadanými hodnotami.Odvození typu Určuje typy Name a City příklad řetězce.

Poznámka k upozorněníUpozornění

Název typu anonymní generovaných kompilátor a mohou lišit od sestavení kompilace.Kód by měl použít nebo spoléhat na anonymní typ názvu.

Protože název typu není k dispozici, nelze použít As klauzule deklarovat cust13.Jeho typ musí odvodit.Bez použití pozdní vazba to omezuje použití anonymních typů lokální proměnné.

Anonymní typy poskytují důležitou podporu pro LINQ dotazy.Další informace o použití anonymních typů v dotazech naleznete v Anonymní typy (Visual Basic) a Představení technologie LINQ v jazyce Visual Basic.

Poznámky o anonymní typy

  • Obvykle se klíčové vlastnosti, které jsou označeny zadáním klíčového slova bude většina vlastností v deklaraci anonymní typ nebo všechny Key z názvu vlastnosti.

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

    Další informace o vlastnosti klíče, viz Key (Visual Basic).

  • Jako názvy typů seznamů inicializátor pro anonymní typ definice musí deklarovat nejméně jednu vlastnost.

    Dim anonymousCust = New With {.Name = "Hugo Garcia"}
    
  • Když je deklarována instance anonymní typ, kompilátor vygeneruje odpovídající definice typu anonymní.Názvy a datové typy vlastností jsou převzaty z instance prohlášení a jsou zahrnuty do definice kompilátorem.Vlastnosti není s názvem a předem definované jako by pojmenovaného typu.Jsou-li odvodit jejich typy.Nelze zadat datové typy vlastností pomocí As klauzule.

  • Anonymní typy můžete také vytvořit názvy a hodnoty jejich vlastnosti několika způsoby.Vlastnost anonymní typ může trvat název a hodnotu proměnné, nebo název a hodnota vlastnosti jiného objektu.

    ' 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}
    

    Další informace o možnostech pro definování vlastností v anonymní typy, viz Postupy: Odvození názvů a typů vlastností v deklaracích anonymního typu (Visual Basic).

Viz také

Úkoly

Postupy: Odvození názvů a typů vlastností v deklaracích anonymního typu (Visual Basic)

Postupy: Deklarace objektu pomocí inicializátoru objektu (Visual Basic)

Referenční dokumentace

Key (Visual Basic)

Koncepty

Odvození místního typu (Visual Basic)

Anonymní typy (Visual Basic)

Představení technologie LINQ v jazyce Visual Basic