이 항목에서는 Visual Basic 프로그램에서 가장 일반적으로 사용되는 특성에 대해 설명합니다.
전역 특성
대부분의 특성은 클래스 또는 메서드와 같은 특정 언어 요소에 적용됩니다. 그러나 일부 특성은 전역 특성이며 전체 어셈블리 또는 모듈에 적용됩니다. 예를 들어 AssemblyVersionAttribute 다음과 같이 어셈블리에 버전 정보를 포함하는 데 특성을 사용할 수 있습니다.
<Assembly: AssemblyVersion("1.0.0.0")>
전역 특성은 최상위 Imports
문 뒤와 형식, 모듈 또는 네임스페이스 선언 앞에 소스 코드에 나타납니다. 전역 특성은 여러 소스 파일에 나타날 수 있지만 파일은 단일 컴파일 패스로 컴파일되어야 합니다. Visual Basic 프로젝트의 경우 전역 특성은 일반적으로 AssemblyInfo.vb 파일에 배치됩니다(Visual Studio에서 프로젝트를 만들 때 파일이 자동으로 생성됨).
어셈블리 특성은 어셈블리에 대한 정보를 제공하는 값입니다. 다음 범주로 분류됩니다.
어셈블리 ID 속성
정보 특성
어셈블리 매니페스트 특성
어셈블리 ID 특성
세 가지 특성(해당하는 경우 강력한 이름 포함)은 어셈블리의 ID(이름, 버전 및 문화권)를 결정합니다. 이러한 특성은 어셈블리의 전체 이름을 형성하며 코드에서 참조할 때 필요합니다. 특성을 사용하여 어셈블리의 버전 및 문화권을 설정할 수 있습니다. 그러나 어셈블리 매니페스트가 포함된 파일에 따라 어셈블리가 생성되면 컴파일러, 어셈블리 정보 대화 상자의 Visual Studio IDE 또는 어셈블리 링커(Al.exe)가 이름 값을 설정합니다. 이 특성은 AssemblyFlagsAttribute 어셈블리의 여러 복사본이 공존할 수 있는지 여부를 지정합니다.
다음 표에서는 ID 특성을 보여줍니다.
특성 | 목적 |
---|---|
AssemblyName | 어셈블리의 ID를 완전히 설명합니다. |
AssemblyVersionAttribute | 어셈블리의 버전을 지정합니다. |
AssemblyCultureAttribute | 어셈블리에서 지원하는 문화권을 지정합니다. |
AssemblyFlagsAttribute | 어셈블리가 동일한 컴퓨터, 동일한 프로세스 또는 동일한 애플리케이션 도메인에서 병렬 실행을 지원하는지 여부를 지정합니다. |
정보 특성
정보 특성을 사용하여 어셈블리에 대한 추가 회사 또는 제품 정보를 제공할 수 있습니다. 다음 표에서는 네임스페이스에 System.Reflection 정의된 정보 특성을 보여줍니다.
특성 | 목적 |
---|---|
AssemblyProductAttribute | 어셈블리 매니페스트의 제품 이름을 지정하는 사용자 지정 특성을 정의합니다. |
AssemblyTrademarkAttribute | 어셈블리 매니페스트의 상표를 지정하는 사용자 지정 특성을 정의합니다. |
AssemblyInformationalVersionAttribute | 어셈블리 매니페스트의 정보 버전을 지정하는 사용자 지정 특성을 정의합니다. |
AssemblyCompanyAttribute | 어셈블리 매니페스트의 회사 이름을 지정하는 사용자 지정 특성을 정의합니다. |
AssemblyCopyrightAttribute | 어셈블리 매니페스트에 대한 저작권을 지정하는 사용자 지정 특성을 정의합니다. |
AssemblyFileVersionAttribute | Win32 파일 버전 리소스에 대해 특정 버전 번호를 사용하도록 컴파일러에 지시합니다. |
CLSCompliantAttribute | 어셈블리가 CLS(공용 언어 사양)를 준수하는지 여부를 나타냅니다. |
어셈블리 매니페스트 특성
어셈블리 매니페스트 특성을 사용하여 어셈블리 매니페스트에 정보를 제공할 수 있습니다. 여기에는 제목, 설명, 기본 별칭 및 구성이 포함됩니다. 다음 표에서는 네임스페이스에 System.Reflection 정의된 어셈블리 매니페스트 특성을 보여줍니다.
특성 | 목적 |
---|---|
AssemblyTitleAttribute | 어셈블리 매니페스트의 어셈블리 제목을 지정하는 사용자 지정 특성을 정의합니다. |
AssemblyDescriptionAttribute | 어셈블리 매니페스트에 대한 어셈블리 설명을 지정하는 사용자 지정 특성을 정의합니다. |
AssemblyConfigurationAttribute | 어셈블리 매니페스트에 대한 어셈블리 구성(예: 정품 또는 디버그)을 지정하는 사용자 지정 특성을 정의합니다. |
AssemblyDefaultAliasAttribute | 어셈블리 매니페스트에 대한 친숙한 기본 별칭을 정의합니다. |
사용되지 않는 특성
이 특성은 Obsolete
프로그램 엔터티를 더 이상 권장되지 않는 엔터티로 표시합니다. 사용되지 않는 것으로 표시된 엔터티를 사용할 때마다 특성이 구성된 방식에 따라 경고 또는 오류가 발생합니다. 다음은 그 예입니다.
<System.Obsolete("use class B")>
Class A
Sub Method()
End Sub
End Class
Class B
<System.Obsolete("use NewMethod", True)>
Sub OldMethod()
End Sub
Sub NewMethod()
End Sub
End Class
이 예제에서는 특성이 Obsolete
클래스 A
및 메서드 B.OldMethod
에 적용됩니다. 적용 B.OldMethod
된 특성 생성자의 두 번째 인수가 설정 true
되므로 이 메서드는 컴파일러 오류를 발생시키는 반면 클래스 A
를 사용하면 경고만 생성됩니다. 그러나 B.NewMethod
를 호출하면 경고나 오류가 생성되지 않습니다.
특성 생성자에 대한 첫 번째 인수로 제공된 문자열이 경고 또는 오류의 일부로 표시됩니다. 예를 들어 이전 정의와 함께 사용할 경우 다음 코드에서는 두 개의 경고 및 하나의 오류가 생성됩니다.
' Generates 2 warnings:
' Dim a As New A
' Generate no errors or warnings:
Dim b As New B
b.NewMethod()
' Generates an error, terminating compilation:
' b.OldMethod()
A
클래스에 대한 두 개의 경고가 각각 클래스 참조 선언 및 클래스 생성자에 대해 생성됩니다.
이 특성은 Obsolete
인수 없이 사용할 수 있지만 항목이 사용되지 않는 이유와 대신 사용할 항목에 대한 설명을 포함하는 것이 좋습니다.
Obsolete
특성은 단일 사용 특성이고 특성을 허용하는 모든 엔터티에 적용할 수 있습니다.
Obsolete
는 ObsoleteAttribute의 별칭입니다.
조건부 특성
Conditional
특성을 사용하면 메서드 실행이 전처리 식별자에 따라 달라집니다.
Conditional
특성은 ConditionalAttribute의 별칭이고 메서드 또는 특성 클래스에 적용할 수 있습니다.
이 예제에서는 Conditional
프로그램별 진단 정보의 표시를 사용하거나 사용하지 않도록 설정하는 메서드에 적용됩니다.
#Const TRACE_ON = True
Imports System.Diagnostics
Module TestConditionalAttribute
Public Class Trace
<Conditional("TRACE_ON")>
Public Shared Sub Msg(ByVal msg As String)
Console.WriteLine(msg)
End Sub
End Class
Sub Main()
Trace.Msg("Now in Main...")
Console.WriteLine("Done.")
End Sub
End Module
TRACE_ON
식별자가 정의되지 않은 경우 추적 출력이 표시되지 않습니다.
이 Conditional
속성은 디버그 빌드에서 추적 및 로깅 기능을 활성화하기 위해 DEBUG
식별자와 함께 자주 사용되지만, 릴리스 빌드에서는 활성화되지 않습니다.
<Conditional("DEBUG")>
Shared Sub DebugMethod()
End Sub
조건부로 표시된 메서드가 호출되면 지정된 전처리 기호의 존재 여부 또는 부재로 호출이 포함되는지 아니면 생략되는지가 결정됩니다. 기호가 정의되면 호출이 포함되고, 정의되지 않으면 호출이 생략됩니다. 사용하는 Conditional
은 다음과 같이 블록 내부에 #if…#endif
메서드를 묶는 것보다 더 명확하고, 더 우아하며, 오류 발생이 적은 대안입니다.
#If DEBUG Then
Sub ConditionalMethod()
End Sub
#End If
조건부 메서드는 클래스 또는 구조체 선언의 메서드여야 하며 반환 값이 없어야 합니다.
여러 식별자 사용
메서드에 여러 Conditional
특성이 있는 경우 조건부 기호 중 하나 이상이 정의된 경우 메서드에 대한 호출이 포함됩니다(즉, OR 연산자를 사용하여 기호가 논리적으로 함께 연결됨). 이 예제에서는 A
또는 B
중 하나가 있을 경우 메서드 호출이 발생합니다.
<Conditional("A"), Conditional("B")>
Shared Sub DoIfAorB()
End Sub
AND 연산자를 사용하여 기호를 논리적으로 연결하는 효과를 얻으려면 직렬 조건부 메서드를 정의할 수 있습니다. 예를 들어 아래의 두 번째 메서드는 둘 다 A
B
정의되어 있는 경우에만 실행됩니다.
<Conditional("A")>
Shared Sub DoIfA()
DoIfAandB()
End Sub
<Conditional("B")>
Shared Sub DoIfAandB()
' Code to execute when both A and B are defined...
End Sub
특성 클래스와 함께 조건부 사용
Conditional
특성을 특성 클래스 정의에 적용할 수도 있습니다. 이 예제에서는 DEBUG가 정의된 경우에만 사용자 지정 특성 Documentation
이 메타데이터에 정보를 추가합니다.
<Conditional("DEBUG")>
Public Class Documentation
Inherits System.Attribute
Private text As String
Sub New(ByVal doc_text As String)
text = doc_text
End Sub
End Class
Class SampleClass
' This attribute will only be included if DEBUG is defined.
<Documentation("This method displays an integer.")>
Shared Sub DoWork(ByVal i As Integer)
System.Console.WriteLine(i)
End Sub
End Class
호출자 정보 특성
호출자 정보 특성을 사용하여 메서드에 대한 호출자에 대한 정보를 가져올 수 있습니다. 소스 코드의 파일 경로, 소스 코드의 줄 번호 및 호출자의 멤버 이름을 가져올 수 있습니다.
멤버 호출자 정보를 얻으려면 선택적 매개 변수에 적용되는 특성을 사용합니다. 각 선택적 매개 변수는 기본값을 지정합니다. 다음 표에서는 네임스페이스에 System.Runtime.CompilerServices 정의된 호출자 정보 특성을 나열합니다.
특성 | 설명 | 유형 |
---|---|---|
CallerFilePathAttribute | 호출자가 포함된 원본 파일의 전체 경로입니다. 컴파일 시 경로입니다. | String |
CallerLineNumberAttribute | 메서드가 호출되는 소스 파일의 줄 번호입니다. | Integer |
CallerMemberNameAttribute | 호출자의 메서드 이름 또는 속성 이름입니다. 자세한 내용은 호출자 정보(Visual Basic)를 참조하세요. | String |
CallerArgumentExpressionAttribute | 호출자가 인수를 위해 사용하는 표현입니다. 자세한 내용은 호출자 정보(Visual Basic)를 참조하세요. | String |
호출자 정보 특성에 대한 자세한 내용은 호출자 정보(Visual Basic)를 참조하세요.
Visual Basic 특성
다음 표에서는 Visual Basic과 관련된 특성을 나열합니다.
특성 | 목적 |
---|---|
ComClassAttribute | 클래스가 COM 개체로 노출되어야 임을 컴파일러에 나타냅니다. |
HideModuleNameAttribute | 모듈에 필요한 자격만 사용하여 모듈 멤버에 액세스할 수 있습니다. |
VBFixedStringAttribute | 파일 입력 및 출력 함수에 사용할 구조체의 고정 길이 문자열 크기를 지정합니다. |
VBFixedArrayAttribute | 파일 입력 및 출력 함수에 사용할 구조체의 고정 배열 크기를 지정합니다. |
COMClassAttribute
Visual Basic에서 COM 구성 요소를 만드는 프로세스를 간소화하는 데 사용합니다 COMClassAttribute
. COM 개체는 .NET Framework 어셈블리와 매우 다릅니다. COMClassAttribute
가 없으면, Visual Basic에서 COM 개체를 생성하기 위해 여러 단계를 수행해야 합니다. 표시된 COMClassAttribute
클래스의 경우 컴파일러는 이러한 많은 단계를 자동으로 수행합니다.
HideModuleNameAttribute
모듈에 필요한 자격만 사용하여 모듈 멤버에 액세스할 수 있도록 허용하는 데 사용합니다 HideModuleNameAttribute
.
VBFixedStringAttribute
Visual Basic이 고정 길이 문자열을 만들도록 강제 적용하는 데 사용합니다 VBFixedStringAttribute
. 문자열은 기본적으로 가변 길이이며 이 특성은 파일에 문자열을 저장할 때 유용합니다. 다음 코드는 다음을 보여 줍니다.
Structure Worker
' The runtime uses VBFixedString to determine
' if the field should be written out as a fixed size.
<VBFixedString(10)> Public LastName As String
<VBFixedString(7)> Public Title As String
<VBFixedString(2)> Public Rank As String
End Structure
VBFixedArrayAttribute (고정 배열 속성)
크기가 고정된 배열을 선언하는 데 사용합니다 VBFixedArrayAttribute
. Visual Basic 문자열과 마찬가지로 배열은 기본적으로 가변 길이입니다. 이 특성은 데이터를 파일에 직렬화하거나 쓸 때 유용합니다.
참고하십시오
.NET