Structure — Instrukcja

Deklaruje nazwę struktury i wprowadza definicję zmiennych, właściwości, zdarzeń i procedur, z których składa się struktura.

Składnia

[ <attributelist> ] [ accessmodifier ] [ Shadows ] [ Partial ] _
Structure name [ ( Of typelist ) ]
    [ Implements interfacenames ]
    [ datamemberdeclarations ]
    [ methodmemberdeclarations ]
End Structure

generatora

Termin Definicja
attributelist Opcjonalny. Zobacz Lista atrybutów.
accessmodifier Opcjonalny. Może być jednym z następujących elementów:

- Public
- Protected
- Friend
- Private
- Protected Friend
- Private Protected

Zobacz Poziomy dostępu w Visual Basic.
Shadows Opcjonalny. Zobacz Cienie.
Partial Opcjonalny. Wskazuje częściową definicję struktury. Zobacz Częściowe.
name Wymagany. Nazwa tej struktury. Zobacz Nazwy zadeklarowanych elementów.
Of Opcjonalny. Określa, że jest to struktura ogólna.
typelist Wymagane, jeśli używasz słowa kluczowego Of . Lista parametrów typu dla tej struktury. Zobacz Typ listy.
Implements Opcjonalny. Wskazuje, że ta struktura implementuje elementy członkowskie co najmniej jednego interfejsu. Zobacz Implements, instrukcja.
interfacenames Wymagane, jeśli używasz instrukcji Implements . Nazwy interfejsów, które implementuje ta struktura.
datamemberdeclarations Wymagany. Zero lub więcej Constinstrukcji , Dimlub EventEnumdeklarujących elementy członkowskie danych struktury.
methodmemberdeclarations Opcjonalny. Zero lub więcej deklaracji Function, Operator, Propertylub Sub procedur, które służą jako składowe metody struktury.
End Structure Wymagany. Kończy definicję Structure .

Uwagi

Instrukcja Structure definiuje typ wartości złożonej, który można dostosować. Struktura to uogólnienie typu zdefiniowanego przez użytkownika (UDT) poprzednich wersji języka Visual Basic. Aby uzyskać więcej informacji, zobacz Struktury.

Struktury obsługują wiele tych samych funkcji co klasy. Na przykład struktury mogą mieć właściwości i procedury, mogą implementować interfejsy i mogą mieć sparametryzowane konstruktory. Istnieją jednak znaczące różnice między strukturami i klasami w takich obszarach jak dziedziczenie, deklaracje i użycie. Ponadto klasy są typami referencyjnymi i strukturami są typami wartości. Aby uzyskać więcej informacji, zobacz Struktury i klasy.

Można używać Structure tylko na poziomie przestrzeni nazw lub modułu. Oznacza to, że kontekst deklaracji struktury musi być plikiem źródłowym, przestrzenią nazw, klasą, strukturą, modułem lub interfejsem i nie może być procedurą ani blokiem. Aby uzyskać więcej informacji, zobacz Konteksty deklaracji i Domyślne poziomy dostępu.

Domyślnie struktura to Dostęp znajomy . Możesz dostosować ich poziomy dostępu za pomocą modyfikatorów dostępu. Aby uzyskać więcej informacji, zobacz Poziomy dostępu w Visual Basic.

Reguły

  • Zagnieżdżenia. Można zdefiniować jedną strukturę w obrębie innej. Struktura zewnętrzna jest nazywana strukturą zawierającą, a struktura wewnętrzna jest nazywana zagnieżdżonym strukturą. Nie można jednak uzyskać dostępu do elementów członkowskich zagnieżdżonej struktury za pomocą struktury zawierającej. Zamiast tego należy zadeklarować zmienną typu danych zagnieżdżonej struktury.

  • Deklaracja elementu członkowskiego. Należy zadeklarować każdy element członkowski struktury. Element członkowski struktury nie może być chroniony lub Protected Friend ponieważ nic nie może dziedziczyć po strukturze. Sama struktura może jednak być Protected lub Protected Friend.

    W strukturze można zadeklarować zero lub więcej nieudostępnych zmiennych lub zdarzeń nieudostępnianych, noncustom. Nie można mieć tylko stałych, właściwości i procedur, nawet jeśli niektóre z nich nie są udostępnione.

  • Inicjowania. Nie można zainicjować wartości żadnego nieudostępnego elementu członkowskiego danych struktury w ramach jego deklaracji. Należy zainicjować taki element członkowski danych za pomocą konstruktora sparametryzowanego w strukturze lub przypisać wartość do elementu członkowskiego po utworzeniu wystąpienia struktury.

  • Dziedziczenia. Struktura nie może dziedziczyć z dowolnego typu innego niż ValueType, z którego dziedziczą wszystkie struktury. W szczególności jedna struktura nie może dziedziczyć z innej.

    Nie można użyć instrukcji Inherits w definicji struktury, nawet w celu określenia elementu ValueType.

  • Implementacji. Jeśli struktura używa instrukcji Implements, należy zaimplementować każdy element członkowski zdefiniowany przez każdy interfejs określony w elemencie interfacenames.

  • Właściwość domyślna. Struktura może określać co najwyżej jedną właściwość jako jej właściwość domyślną przy użyciu modyfikatora domyślnego. Aby uzyskać więcej informacji, zobacz Domyślne.

Zachowanie

  • Poziom dostępu. W ramach struktury można zadeklarować każdy element członkowski z własnym poziomem dostępu. Wszystkie elementy członkowskie struktury domyślnie mają dostęp publiczny . Należy pamiętać, że jeśli sama struktura ma bardziej ograniczony poziom dostępu, powoduje to automatyczne ograniczenie dostępu do jego elementów członkowskich, nawet jeśli dostosujesz ich poziomy dostępu za pomocą modyfikatorów dostępu.

  • Zakres. Struktura znajduje się w zakresie w całej przestrzeni nazw, klasie, strukturze lub module.

    Zakres każdego elementu członkowskiego struktury jest całą strukturą.

  • Okres istnienia. Struktura nie ma okresu istnienia. Zamiast tego każde wystąpienie tej struktury ma okres istnienia niezależny od wszystkich innych wystąpień.

    Okres istnienia wystąpienia rozpoczyna się po utworzeniu przez klauzulę Nowy operator . Kończy się, gdy okres istnienia zmiennej, która ją przechowuje, kończy się.

    Nie można przedłużyć okresu istnienia wystąpienia struktury. Przybliżenie funkcji struktury statycznej jest dostarczane przez moduł. Aby uzyskać więcej informacji, zobacz Instrukcja modułu.

    Składowe struktury mają okresy istnienia w zależności od tego, jak i gdzie są deklarowane. Aby uzyskać więcej informacji, zobacz "Lifetime" in Class Statement (Wyrażenie klasy).

  • Kwalifikacji. Kod poza strukturą musi kwalifikować nazwę elementu członkowskiego o nazwie tej struktury.

    Jeśli kod wewnątrz zagnieżdżonej struktury sprawia, że niekwalifikowane odwołanie do elementu programowania, Visual Basic wyszukuje element jako pierwszy w zagnieżdżonej strukturze, a następnie w jego strukturze zawierającej i tak dalej do najbardziej zewnętrznego elementu zawierającego. Aby uzyskać więcej informacji, zobacz Odwołania do zadeklarowanych elementów.

  • Zużycie pamięci. Podobnie jak w przypadku wszystkich typów danych złożonych, nie można bezpiecznie obliczyć całkowitego zużycia pamięci struktury przez dodanie nominalnych alokacji magazynu jej elementów członkowskich. Ponadto nie można bezpiecznie założyć, że kolejność przechowywania w pamięci jest taka sama jak kolejność deklaracji. Jeśli musisz kontrolować układ magazynu struktury, możesz zastosować StructLayoutAttribute atrybut do instrukcji Structure .

Przykład

W poniższym przykładzie użyto instrukcji Structure , aby zdefiniować zestaw powiązanych danych dla pracownika. Przedstawia użycie elementów Public, Friendi elementów Private członkowskich w celu odzwierciedlenia poufności elementów danych. Przedstawiono również procedurę, właściwość i składowe zdarzeń.

Public Structure employee
    ' Public members, accessible from throughout declaration region.
    Public firstName As String
    Public middleName As String
    Public lastName As String
    ' Friend members, accessible from anywhere within the same assembly.
    Friend employeeNumber As Integer
    Friend workPhone As Long
    ' Private members, accessible only from within the structure itself.
    Private homePhone As Long
    Private level As Integer
    Private salary As Double
    Private bonus As Double
    ' Procedure member, which can access structure's private members.
    Friend Sub CalculateBonus(ByVal rate As Single)
        bonus = salary * CDbl(rate)
    End Sub
    ' Property member to return employee's eligibility.
    Friend ReadOnly Property Eligible() As Boolean
        Get
            Return level >= 25
        End Get
    End Property
    ' Event member, raised when business phone number has changed.
    Public Event ChangedWorkPhone(ByVal newPhone As Long)
End Structure

Aby uzyskać więcej informacji na temat używania Structures, zobacz Zmienna struktury.

Zobacz też