Sdílet prostřednictvím


Definice autonomního typu (Visual Basic)

V reakci na prohlášení instanci anonymní typ, kompilátor vytvoří novou definici třída , která obsahuje vlastnosti určené pro typ.

Kompilátor generovat kód

Následující definice product, kompilátor vytvoří novou definici třída , který obsahuje vlastnosti Name, Price, a OnHand.

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

Definice třída obsahuje definice vlastnost , které jsou podobné následujícím.Všimněte si, že žádné Set metoda pro vlastnosti klíč . Hodnoty vlastnosti klíč jsou jen pro čtení.

Public Class $Anonymous1
    Private _name As String
    Private _price As Double
    Private _onHand As Integer
     Public ReadOnly Property Name() As String
        Get
            Return _name
        End Get
    End Property

    Public ReadOnly Property Price() As Double
        Get
            Return _price
        End Get
    End Property

    Public Property OnHand() As Integer
        Get
            Return _onHand
        End Get
        Set(ByVal Value As Integer)
            _onHand = Value
        End Set
    End Property

End Class

Definice anonymní typ navíc obsahují výchozí konstruktor.Konstruktory, které vyžadují parametrů nejsou povoleny.

Deklarace anonymní typ obsahuje klíčnejméně jednuvlastnost, definice typu, má přednost před tři členy zděděné z Object: Equals, GetHashCode, a ToString. Pokud žádné vlastnosti klíč jsou deklarovány, pouze ToString přepsáno.Lokální změny poskytuje následující funkce:

  • EqualsVrátí True jsou dvě instance anonymní typ stejnou instanci nebo, pokud splňují následující podmínky:

    • Mají stejný počet vlastností.

    • Vlastnosti jsou deklarovány ve stejném pořadí, se stejnými názvy a stejné typy odvodit.Porovnání názvů nejsou rozlišována.

    • Alespoň jednu z vlastností je klíčvlastnosta Key klíčové slovo je použito stejné vlastnosti.

    • Srovnání každé odpovídající dvojice klíč vlastnosti vrátí True.

    Například v následujících příkladech Equals vrátí True pouze pro employee01 a employee08.Komentář před každý čára Určuje důvod, proč se nová instance neodpovídá employee01.

    Dim employee01 = New With {Key .Name = "Bob", Key .Category = 3, .InOffice = False}
    
    ' employee02 has no InOffice property. 
    Dim employee02 = New With {Key .Name = "Bob", Key .Category = 3}
    
    ' The first property has a different name. 
    Dim employee03 = New With {Key .FirstName = "Bob", Key .Category = 3, .InOffice = False}
    
    ' Property Category has a different value. 
    Dim employee04 = New With {Key .Name = "Bob", Key .Category = 2, .InOffice = False}
    
    ' Property Category has a different type. 
    Dim employee05 = New With {Key .Name = "Bob", Key .Category = 3.2, .InOffice = False}
    
    ' The properties are declared in a different order. 
    Dim employee06 = New With {Key .Category = 3, Key .Name = "Bob", .InOffice = False}
    
    ' Property Category is not a key property. 
    Dim employee07 = New With {Key .Name = "Bob", .Category = 3, .InOffice = False}
    
    ' employee01 and employee 08 meet all conditions for equality. Note  
    ' that the values of the non-key field need not be the same. 
    Dim employee08 = New With {Key .Name = "Bob", Key .Category = 2 + 1, .InOffice = True}
    
    ' Equals returns True only for employee01 and employee08.
    Console.WriteLine(employee01.Equals(employee08))
    
  • GetHashcodeposkytuje vhodně jedinečný algoritmusGetHashCode.algoritmus používá pouze vlastnosti klíč vypočítat hodnota hash.

  • ToStringVrátí řetězec hodnot spojených vlastnost , jak ukazuje následující příklad.Oba klíč a non-jsou zahrnuty vlastnostiklíč .

    Console.WriteLine(employee01.ToString())
    Console.WriteLine(employee01)
    ' The preceding statements both display the following: 
    ' { Name = Bob, Category = 3, InOffice = False }
    

Nelze explicitně pojmenované vlastnosti anonymní typ konfliktu s těmito metodami generované.Nelze je použít .Equals, .GetHashCode, nebo .ToString název vlastnost.

Anonymní typ definice, které obsahují alespoň jeden klíčvlastnost také implementovat IEquatable rozhraní, kde T je typ anonymní typ.

[!POZNÁMKA]

Anonymní typ prohlášení vytvořit stejný anonymní typ , pouze pokud se stejné sestavení, jejich vlastnosti mají stejné názvy a stejné typy odvodit, vlastnosti, které jsou deklarovány ve stejném pořadí a stejné vlastnosti, které jsou označeny jako vlastnosti klíč .

Viz také

Úkoly

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

Koncepty

Anonymní typy (Visual Basic)