특성의 적용

업데이트: 2007년 11월

속성, 메서드, 이벤트, 클래스 및 어셈블리 등과 같은 프로그램 요소에 특성 블록을 추가하여 특성을 적용합니다. 특성 블록은 쉼표로 구분된 특성 선언 목록을 꺾쇠괄호("< >)"로 묶은 것입니다. 특성 선언은 Module 또는 Assembly 등의 특성 한정자(선택적), 특성 이름, 위치 매개 변수 목록(필수. 오버로드된 상태도 허용됨), 명명된 인수 목록(선택적)으로 구성됩니다. 한정자가 있는 특성은 소스 파일 맨 위의 특성 섹션에 넣어야 합니다. 예를 들어, 다음 코드에서는 어셈블리의 제목을 정의하는 어셈블리 특성을 설정하고 모듈이 CLS(공용 언어 사양) 규격임을 나타내는 모듈 특성을 설정합니다.

Imports System.Reflection
<Assembly: AssemblyTitleAttribute("Production assembly 4"), _
Module: CLSCompliant(True)> 

또한 Visual Studio 사용자 인터페이스에서 자동으로 프로젝트에 추가하는 AssemblyInfo.vb 파일을 통해서도 어셈블리 특성을 적용할 수 있습니다. 이 파일에는 기본값 또는 빈 값을 가진 어셈블리 수준 특성이 포함되어 있습니다.

속성과 같은 프로그램 요소에 특성을 적용하면 특성이 요소보다 우선합니다. 예를 들어, 다음 코드에서는 클래스 정의에 특성을 적용합니다.

<CustomAttr(Update:=True)> Class Class1

일반적으로 .NET Framework에서는 특성을 다른 항목과 구분하기 위해 모든 특성 이름 끝에 "Attribute"를 붙입니다. 그러나 특성을 사용할 때 특성 접미사를 지정할 필요는 없습니다. 예를 들어, CustomAttrAttribute라는 특성이 있는 경우 <CustomAttr(Update:=True)>라고 지정하는 것은 <CustomAttrAttribute(Update:=True)>라고 지정하는 것과 같습니다.

특성 인수

특성은 개체에서 선택적 인수, 필수적 인수, 위치 인수 및 명명된 인수가 사용되는 방식과 동일한 방식으로 해당 형식의 인수를 사용합니다. 위치 인수는 특성의 생성자에 대해 선언되는 순서대로 지정되는 인수입니다. 예를 들어, 다음 코드에서는 두 개의 값 <CustomAttr(True, False)>를 사용하여 특성의 Sub New 생성자를 호출합니다.

<CustomAttr(True, False)> Class Class1

특성 클래스에서 Sub New에 전달된 인수는 일반적으로 필드 및 속성 값을 초기화하는 데 사용됩니다.

명명된 인수를 사용하여 속성 및 필드 값을 직접 설정할 수 있습니다. 명명된 인수는 ":="를 인수 이름에 추가한 다음 지정된 값을 입력하여 지정합니다. 위치 인수와 달리 명명된 인수는 지정되는 순서에 제한을 받지 않습니다. 예를 들어, 다음 코드에서는 Update 필드에 대해 True 값을 설정하고 Keep 필드에 대해 False 값을 설정합니다.

<CustomAttr(Update:=True, Keep:=False)> Class Class1
참고:

표준 메서드 호출에 사용되는 인수와 특성 인수 사이에는 한 가지 중요한 차이점이 있습니다. 특성 클래스의 Sub New 생성자와 함께 사용되는 인수에는 위치 인수를 사용해야 하고, 필드의 값 및 특성 클래스의 속성을 설정하는 데는 명명된 인수만 사용해야 합니다.

필수적 인수는 항상 지정해야 하는 인수입니다. 선택적 인수는 위치 인수를 사용하는 경우 쉼표를 자리 표시자로 사용하여 건너뛸 수 있고, 명명된 인수를 사용하는 경우에는 간단하게 생략할 수 있는 인수입니다.

특성 인수는 상수 식이어야 합니다.

특성 예제

다음은 특성을 선언하는 과정을 보여 주는 예제입니다.

MarshalAs 특성을 사용하여 매개 변수가 마샬링되는 방법을 제어하려면

  1. 소스 코드 맨 위에 System.Runtime.InteropServices 네임스페이스에 대한 Imports 문을 추가합니다.

    Imports System.Runtime.InteropServices
    
  2. 매개 변수 앞에 MarshalAsAttribute 특성을 붙이고 대상에 필요한 데이터 형식을 지정합니다. 예를 들어, 다음 코드에서는 Windows API 함수에 대해 두 개의 매개 변수를 long 데이터 형식의 포인터로 문자열(LPStr)에 마샬링합니다.

    Declare Auto Sub CopyFile Lib "Kernel32.Lib" ( _
       <MarshalAs(UnmanagedType.LPWStr)> ByVal existingfile As String, _
       <MarshalAs(UnmanagedType.LPWStr)> ByVal newfile As String, _
       ByVal failifexists As Boolean _
    )
    

공용 언어 런타임에서는 MarshalAsAttribute 특성을 사용하여 Visual Basic의 관리 코드와 Windows API 호출의 비관리 코드 사이에서 매개 변수가 마샬링되는 방법을 결정합니다.

원격 웹 클라이언트에 메서드를 노출하려면

  1. 파일 메뉴에서 프로젝트를 클릭하고 ASP.NET 웹 서비스 템플릿을 선택한 다음 System.Web 네임스페이스에 대한 Imports 문을 추가합니다.

    Imports System.Web.Services
    
  2. 메서드를 정의하고 WebMethodAttribute 특성을 사용하여 원격 웹 클라이언트에서 메서드를 호출할 수 있도록 합니다.

    <WebMethod()> Public Function HelloWorld() As String
        HelloWorld = "Hello World..."
    End Function
    

XML Web services의 메서드를 Public으로 만드는 것만으로는 해당 메서드를 웹 클라이언트에 노출시킬 수 없습니다. 원격 웹 클라이언트에서 메서드를 호출하려면 메서드에 WebMethodAttribute 특성을 명시적으로 적용해야 합니다.

참고 항목

작업

방법: 사용자 지정 특성 정의

개념

Visual Basic의 특성 개요

특성의 일반적인 사용

위치 및 이름으로 인수 전달

참조

WebMethodAttribute

Imports 문(.NET 네임스페이스 및 형식)

MarshalAsAttribute

System.Web

기타 리소스

Visual Basic의 사용자 지정 특성