Property 프로시저(Visual Basic)

속성 프로시저는 모듈, 클래스 또는 구조체의 사용자 지정 속성을 조작하는 일련의 Visual Basic 문입니다. 속성 프로시저는 속성 접근자라고도 합니다.

Visual Basic은 다음과 같은 속성 프로시저를 제공합니다.

  • Get 프로시저는 속성 값을 반환합니다. 식의 속성에 액세스할 때 호출됩니다.
  • Set 프로시저는 개체 참조를 포함하여 속성을 값으로 설정합니다. 속성에 값을 할당할 때 호출됩니다.

일반적으로 GetSet 문을 사용하여 속성 프로시저를 쌍으로 정의하지만 속성이 읽기 전용(Get 문)이거나 쓰기 전용(Set 문)인 경우 프로시저만 정의할 수 있습니다.

자동 구현 속성을 사용할 때 GetSet 프로시저를 생략할 수 있습니다. 자세한 내용은 자동으로 구현된 속성을 참조하세요.

클래스, 구조체 및 모듈에서 속성을 정의할 수 있습니다. 속성은 기본적으로 Public입니다. 즉, 속성의 컨테이너에 액세스할 수 있는 애플리케이션의 어느 곳에서나 속성을 호출할 수 있습니다.

속성과 변수를 비교하려면 Visual Basic의 속성과 변수 간 차이점을 참조하세요.

선언 구문

속성 자체는 Property 문End Property 문 내에 포함된 코드 블록으로 정의됩니다. 이 블록 내에서 각 속성 프로시저는 문(Get 또는 Set) 및 일치하는 End 선언 내에 포함된 내부 블록으로 나타납니다.

속성과 해당 프로시저를 선언하는 구문은 다음과 같습니다.

[Default] [Modifiers] Property PropertyName[(ParameterList)] [As DataType]
    [AccessLevel] Get
        ' Statements of the Get procedure.
        ' The following statement returns an expression as the property's value.
        Return Expression
    End Get
    [AccessLevel] Set[(ByVal NewValue As DataType)]
        ' Statements of the Set procedure.
        ' The following statement assigns newvalue as the property's value.
        LValue = NewValue
    End Set
End Property
' - or -
[Default] [Modifiers] Property PropertyName [(ParameterList)] [As DataType]

Modifiers는 액세스 수준과 오버로드, 재정의, 공유, 섀도잉에 관한 정보는 물론 속성이 읽기 전용인지 쓰기 전용인지 여부를 지정할 수 있습니다. Get 또는 Set 프로시저의 AccessLevel은 속성 자체에 지정된 액세스 수준보다 더 제한적인 수준일 수 있습니다. 자세한 내용은 Property 문을 참조하세요.

데이터 형식

속성의 데이터 형식과 주체 액세스 수준은 속성 프로시저가 아닌 Property 문에서 정의됩니다. 속성에는 하나의 데이터 형식만 있을 수 있습니다. 예를 들어, Decimal 값을 저장하지만 Double 값을 검색하는 속성을 정의할 수 없습니다.

액세스 수준

그러나 속성에 대한 보안 주체 액세스 수준을 정의하고 해당 속성 프로시저 중 하나에서 액세스 수준을 추가로 제한할 수 있습니다. 예를 들어, Public 속성을 정의한 다음 Private Set 프로시저를 정의할 수 있습니다. Get 프로시저는 Public으로 유지됩니다. 속성의 프로시저 중 하나에서만 액세스 수준을 변경할 수 있으며 보안 주체 액세스 수준보다 더 제한적으로만 만들 수 있습니다. 자세한 내용은 방법: 혼합 액세스 수준으로 속성 선언을 참조하세요.

매개 변수 선언

전달 메커니즘이 ByVal이어야 한다는 점을 제외하면 하위 프로시저와 동일한 방식으로 각 매개 변수를 선언합니다.

매개 변수 목록의 각 매개 변수에 대한 구문은 다음과 같습니다.

[Optional] ByVal [ParamArray] parametername As datatype

매개 변수가 선택 사항인 경우 선언의 일부로 기본값도 제공해야 합니다. 기본값을 지정하는 구문은 다음과 같습니다.

Optional ByVal parametername As datatype = defaultvalue

속성 값

Get 프로시저에서 반환 값은 속성 값으로 호출 식에 제공됩니다.

Set 프로시저에서 새 속성 값은 Set 문의 매개 변수에 전달됩니다. 매개 변수를 명시적으로 선언하는 경우 속성과 동일한 데이터 형식으로 선언해야 합니다. 매개 변수를 선언하지 않으면 컴파일러가 암시적 매개 변수 Value를 사용하여 속성에 할당할 새 값을 나타냅니다.

호출 구문

속성을 참조하여 속성 프로시저를 암시적으로 호출합니다. 선택 사항이 아닌 모든 인수에 대한 값을 제공해야 하고 인수 목록을 괄호로 묶어야 한다는 점을 제외하면 변수 이름을 사용하는 것과 동일한 방식으로 속성 이름을 사용합니다. 인수가 제공되지 않으면 선택적으로 괄호를 생략할 수 있습니다.

Set 프로시저에 대한 암시적 호출의 구문은 다음과 같습니다.

propertyname[(argumentlist)] = expression

Get 프로시저에 대한 암시적 호출의 구문은 다음과 같습니다.

lvalue = propertyname[(argumentlist)]
Do While (propertyname[(argumentlist)] > expression)

선언 및 호출의 그림

다음 속성은 이름과 성이라는 두 개의 구성 이름으로 전체 이름을 저장합니다. 호출 코드가 fullName을 읽으면 Get 프로시저가 두 구성 요소 이름을 결합하고 전체 이름을 반환합니다. 호출 코드가 새 전체 이름을 할당하면 Set 프로시저는 이를 두 개의 구성 이름으로 분리하려고 시도합니다. 공백을 찾지 못하면 모두 이름으로 저장합니다.

Dim firstName, lastName As String
Property fullName() As String
    Get
      If lastName = "" Then
          Return firstName
      Else
          Return firstName & " " & lastName
      End If

    End Get
    Set(ByVal Value As String)
        Dim space As Integer = Value.IndexOf(" ")
        If space < 0 Then
            firstName = Value
            lastName = ""
        Else
            firstName = Value.Substring(0, space)
            lastName = Value.Substring(space + 1)
        End If
    End Set
End Property

다음 예에서는 fullName의 속성 프로시저에 대한 일반적인 호출을 보여 줍니다.

fullName = "MyFirstName MyLastName"
MsgBox(fullName)

참고 항목