Dela via


Så här deklarerar och anropar du en standardegenskap i Visual Basic

En standardegenskap är en klass- eller strukturegenskap som koden kan komma åt utan att ange den. När du anropar kodnamn en klass eller struktur men inte en egenskap, och kontexten tillåter åtkomst till en egenskap, löser Visual Basic åtkomsten till den klassen eller strukturens standardegenskap om det finns en sådan.

En klass eller struktur kan ha högst en standardegenskap. Du kan dock överbelasta en standardegenskap och ha mer än en version av den.

Mer information finns i Standard.

Deklarera en standardegenskap

  1. Deklarera egenskapen på normalt sätt. Ange inte nyckelordet Shared eller Private .

  2. Inkludera nyckelordet Default i egenskapsdeklarationen.

  3. Ange minst en parameter för egenskapen. Du kan inte definiera en standardegenskap som inte tar minst ett argument.

    Default Property myProperty(ByVal index As Integer) As String
    

Anropa en standardegenskap

  1. Deklarera en variabel för den innehållande klassen eller strukturtypen.

    Dim x As New class1(3)
    
  2. Använd variabelnamnet ensamt i ett uttryck där du normalt skulle inkludera egenskapsnamnet.

    MsgBox(x)
    
  3. Följ variabelnamnet med en argumentlista inom parenteser. En standardegenskap måste ha minst ett argument.

    MsgBox(x(1))
    
  4. Om du vill hämta standardegenskapsvärdet använder du variabelnamnet, med en argumentlista, i ett uttryck eller efter likhetstecknet (=) i en tilldelningsinstrukment.

    MsgBox(x(1) & x(2) & x(3))
    
  5. Om du vill ange standardegenskapsvärdet använder du variabelnamnet, med en argumentlista, till vänster om en tilldelningsinstrukment.

    x(1) = "Hello"
    x(2) = " "
    x(3) = "World"
    
  6. Du kan alltid ange standardegenskapsnamnet tillsammans med variabelnamnet, precis som du skulle göra för att komma åt andra egenskaper.

    x.myProperty(1) = "Hello"
    x.myProperty(2) = " "
    x.myProperty(3) = "World"
    

Exempel 1

I följande exempel deklareras en standardegenskap för en klass.

Public Class class1
    Private myStrings() As String
    Sub New(ByVal size As Integer)
        ReDim myStrings(size)
    End Sub
    Default Property myProperty(ByVal index As Integer) As String
        Get
            ' The Get property procedure is called when the value
            ' of the property is retrieved.
            Return myStrings(index)
        End Get
        Set(ByVal Value As String)
            ' The Set property procedure is called when the value
            ' of the property is modified.
            ' The value to be assigned is passed in the argument 
            ' to Set.
            myStrings(index) = Value
        End Set
    End Property
End Class

Exempel 2

I följande exempel visas hur du anropar standardegenskapen myProperty för klassen class1. De tre tilldelningsinstruktionerna lagrar värden i myPropertyoch anropet MsgBox läser värdena.

Sub Test()
    Dim x As New class1(3)
    x(1) = "Hello"
    x(2) = " "
    x(3) = "World"
    MsgBox(x(1) & x(2) & x(3))
End Sub

Den vanligaste användningen av en standardegenskap är Item[] egenskapen i olika samlingsklasser.

Robust programmering

Standardegenskaper kan leda till en liten minskning av källkodstecken, men de kan göra koden svårare att läsa. Om den anropande koden inte är bekant med din klass eller struktur kan det inte vara säkert om referensen har åtkomst till själva klassen eller strukturen eller en standardegenskap när den refererar till klass- eller strukturnamnet. Detta kan leda till kompilatorfel eller subtila körningslogikfel.

Du kan minska risken för standardegenskapsfel något genom att alltid använda alternativet Strikt-instruktion för att ange kontroll av kompilatortyp till On.

Om du planerar att använda en fördefinierad klass eller struktur i koden måste du avgöra om den har en standardegenskap och i så fall vad dess namn är.

På grund av dessa nackdelar bör du överväga att inte definiera standardegenskaper. För kodläsbarhet bör du också överväga att alltid referera till alla egenskaper explicit, även standardegenskaper.

Se även