구조체의 이름을 선언하고 구조체가 구성하는 변수, 속성, 이벤트 및 프로시저의 정의를 도입합니다.
문법
[ <attributelist> ] [ accessmodifier ] [ Shadows ] [ Partial ] _
Structure name [ ( Of typelist ) ]
[ Implements interfacenames ]
[ datamemberdeclarations ]
[ methodmemberdeclarations ]
End Structure
부분
| 기간 | 정의 |
|---|---|
attributelist |
선택 사항입니다. 특성 목록을 참조하세요. |
accessmodifier |
선택 사항입니다. 다음 중 하나일 수 있습니다. - 공공의 - 보호 - 친구 - 민간의 - 보호된 친구 - 프라이빗 보호됨 Visual Basic의 액세스 수준을 참조하세요. |
Shadows |
선택 사항입니다. 그림자를 참조하세요. |
Partial |
선택 사항입니다. 구조체의 부분 정의를 나타냅니다. 부분 참조 |
name |
필수 사항입니다. 이 구조체의 이름입니다. 선언된 요소 이름을 참조하세요. |
Of |
선택 사항입니다. 제네릭 구조체임을 지정합니다. |
typelist |
Of 키워드를 사용하는 경우 필수입니다. 이 구조체의 형식 매개 변수 목록입니다. 형식 목록을 참조하세요. |
Implements |
선택 사항입니다. 이 구조체가 하나 이상의 인터페이스의 멤버를 구현한다는 것을 나타냅니다. Implements 문을 참조하세요. |
interfacenames |
문을 사용하는 경우 필수입니다 Implements . 이 구조가 구현하는 인터페이스의 이름입니다. |
datamemberdeclarations |
필수 사항입니다. 구조체의 데이터 멤버를 선언하는 0개 이상의 EnumConstDim문 또는 Event 문입니다. |
methodmemberdeclarations |
선택 사항입니다. 구조체의 Function메서드 멤버 역할을 하는 , PropertyOperator또는 Sub 프로시저의 0개 이상의 선언입니다. |
End Structure |
필수 사항입니다. 정의를 종료합니다 Structure . |
비고
이 문은 Structure 사용자 지정할 수 있는 복합 값 형식을 정의합니다.
구조체는 이전 버전의 Visual Basic의 UDT(사용자 정의 형식)의 일반화입니다. 자세한 내용은 구조체를 참조하세요.
구조체는 클래스와 동일한 많은 기능을 지원합니다. 예를 들어 구조체에는 속성과 프로시저가 있을 수 있고, 인터페이스를 구현할 수 있으며, 매개 변수가 있는 생성자를 가질 수 있습니다. 그러나 상속, 선언 및 사용과 같은 영역에서 구조체와 클래스 간에는 상당한 차이가 있습니다. 또한 클래스는 참조 형식이고 구조체는 값 형식입니다. 자세한 내용은 구조 및 클래스를 참조하세요.
네임스페이스 또는 모듈 수준에서만 사용할 Structure 수 있습니다. 즉, 구조체의 선언 컨텍스트 는 원본 파일, 네임스페이스, 클래스, 구조체, 모듈 또는 인터페이스여야 하며 프로시저 또는 블록이 될 수 없습니다. 자세한 내용은 선언 컨텍스트 및 기본 액세스 수준을 참조하세요.
구조체는 기본적으로 Friend 액세스로 설정됩니다. 액세스 한정자를 사용하여 액세스 수준을 조정할 수 있습니다. 자세한 내용은 Visual Basic의 액세스 수준을 참조하세요.
규칙
중첩. 하나의 구조를 다른 구조 내에서 정의할 수 있습니다. 외부 구조체를 포함하는 구조체라고 하며 내부 구조를 중첩된 구조체라고합니다. 그러나 포함하는 구조를 통해 중첩된 구조체의 멤버에 액세스할 수는 없습니다. 대신 중첩된 구조체의 데이터 형식 변수를 선언해야 합니다.
멤버 선언입니다. 구조체의 모든 멤버를 선언해야 합니다. 구조체 멤버는 보호할
Protected Friend수 없거나 구조체에서 상속할 수 없기 때문입니다. 그러나 구조 자체는 될 수 있습니다Protected.Protected Friend구조체에서 공유되지 않는 변수 또는 공유되지 않는 비구성 이벤트를 0개 이상 선언할 수 있습니다. 일부 상수는 공유되지 않더라도 상수, 속성 및 프로시저만 가질 수 없습니다.
초기화. 구조체의 공유되지 않은 데이터 멤버 값을 선언의 일부로 초기화할 수 없습니다. 구조체에서 매개 변수가 있는 생성자를 사용하여 이러한 데이터 멤버를 초기화하거나 구조체의 인스턴스를 만든 후 멤버에 값을 할당해야 합니다.
상속. 구조체는 모든 구조체가 상속하는 형식이 아닌 ValueType다른 형식에서 상속할 수 없습니다. 특히 한 구조체는 다른 구조체에서 상속할 수 없습니다.
구조체 정의에서 Inherits 문을 사용하여 지정할 ValueType수도 없습니다.
구현. 구조체에서 Implements 문을 사용하는 경우 지정
interfacenames한 모든 인터페이스에서 정의된 모든 멤버를 구현해야 합니다.기본 속성입니다. 구조체는 기본 한정자를 사용하여 최대 하나의 속성을 기본 속성으로 지정할 수 있습니다. 자세한 내용은 기본값을 참조하세요.
행동
액세스 수준입니다. 구조 내에서 자체 액세스 수준으로 각 멤버를 선언할 수 있습니다. 모든 구조체 멤버는 기본적으로 공용 액세스로 설정됩니다. 구조 자체에 더 제한된 액세스 수준이 있는 경우 액세스 한정자를 사용하여 액세스 수준을 조정하더라도 멤버에 대한 액세스가 자동으로 제한됩니다.
범위 구조체는 포함하는 네임스페이스, 클래스, 구조체 또는 모듈 전체의 범위에 있습니다.
모든 구조체 멤버의 범위는 전체 구조체입니다.
평생. 구조체 자체에는 수명이 없습니다. 오히려 해당 구조의 각 인스턴스는 다른 모든 인스턴스와 독립적인 수명을 갖습니다.
인스턴스의 수명은 새 연산자 절에 의해 만들어지면 시작됩니다. 이를 보유하는 변수의 수명이 종료되면 종료됩니다.
구조체 인스턴스의 수명을 연장할 수 없습니다. 정적 구조 기능에 대한 근사값은 모듈에서 제공합니다. 자세한 내용은 Module 문을 참조하세요.
구조체 멤버는 선언되는 방법과 위치에 따라 수명을 갖습니다. 자세한 내용은 클래스 문의 "수명"을 참조하세요.
자격. 구조체 외부의 코드는 해당 구조체의 이름으로 멤버의 이름을 한정해야 합니다.
중첩된 구조 내의 코드가 프로그래밍 요소에 대한 정규화되지 않은 참조를 만드는 경우 Visual Basic은 중첩된 구조에서 먼저 요소를 검색한 다음, 포함하는 구조체에서 요소를 검색하고, 가장 바깥쪽에 포함된 요소로 내보낼 수 있습니다. 자세한 내용은 선언된 요소에 대한 참조를 참조하세요.
메모리 사용량. 모든 복합 데이터 형식과 마찬가지로 멤버의 명목 스토리지 할당을 함께 추가하여 구조체의 총 메모리 사용량을 안전하게 계산할 수 없습니다. 또한 메모리의 스토리지 순서가 선언 순서와 동일하다고 안전하게 가정할 수 없습니다. 구조체의 스토리지 레이아웃을 제어해야 하는 경우 문에 StructLayoutAttribute 특성을 적용할
Structure수 있습니다.
예시
다음 예제에서는 문을 Structure 사용하여 직원의 관련 데이터 집합을 정의합니다. 데이터 항목의 Public민감도를 반영하기 위해 , Friend및 Private 멤버를 사용하는 방법을 보여줍니다. 프로시저, 속성 및 이벤트 멤버도 표시됩니다.
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
s를 사용하는 Structure방법에 대한 자세한 내용은 구조 변수를 참조하세요.
참고하십시오
.NET