특성(F#)
특성을 사용하면 프로그래밍 구문에 메타데이터를 적용할 수 있습니다.
통사론
[<target:attribute-name(arguments)>]
비고
이전 구문에서 대상 선택 사항이며, 있는 경우 특성이 적용되는 프로그램 엔터티의 종류를 지정합니다. 대상 유효한 값은 이 문서의 뒷부분에 나오는 표에 나와 있습니다.
속성 이름은 (네임스페이스로 정규화될 수 있는) 유효한 속성 형식의 이름을 나타내며, 일반적으로 속성 형식 이름에 사용되는 접미사 Attribute
를 포함하거나 포함하지 않을 수 있습니다. 예를 들어 이 컨텍스트에서는 ObsoleteAttribute
형식을 Obsolete
로 축약할 수 있습니다.
property-name = property-value
이러한 속성 초기화는 순서에 따라 할 수 있지만 위치 인수를 따라야 합니다. 다음은 위치 인수 및 속성 초기화를 사용하는 특성의 예입니다.
open System.Runtime.InteropServices
[<DllImport("kernel32", SetLastError=true)>]
extern bool CloseHandle(nativeint handle)
이 예제에서 특성은 DllImportAttribute
, 여기서는 단축된 형식으로 사용됩니다. 첫 번째 인수는 위치 매개 변수이고 두 번째 인수는 속성입니다.
.NET 프로그래밍 구조인 특성은 속성으로 알려진 개체를 형식 또는 다른 프로그램 요소와 연결할 수 있도록 합니다. 특성이 적용되는 프로그램 요소를 특성 대상이라고 합니다. 특성은 일반적으로 대상에 대한 메타데이터를 포함합니다. 이 컨텍스트에서 메타데이터는 필드 및 멤버 이외의 형식에 대한 모든 데이터일 수 있습니다.
F#의 특성은 함수, 메서드, 어셈블리, 모듈, 형식(클래스, 레코드, 구조체, 인터페이스, 대리자, 열거형, 공용 구조체 등), 생성자, 속성, 필드, 매개 변수, 형식 매개 변수 및 반환 값에 적용할 수 있습니다. 클래스, 식 또는 워크플로 식 내의 let
바인딩에는 특성이 허용되지 않습니다.
일반적으로 특성 선언은 특성 대상 선언 바로 앞에 나타납니다. 다음과 같이 여러 특성 선언을 함께 사용할 수 있습니다.
[<Owner("Jason Carlson")>]
[<Company("Microsoft")>]
type SomeType1 =
.NET 리플렉션을 사용하여 런타임에 특성을 쿼리할 수 있습니다.
이전 코드 예제와 같이 여러 특성을 개별적으로 선언하거나 다음과 같이 세미콜론을 사용하여 개별 특성과 생성자를 구분하는 경우 하나의 대괄호 집합에서 선언할 수 있습니다.
[<Owner("Darren Parker"); Company("Microsoft")>]
type SomeType2 =
일반적으로 발생하는 특성에는 Obsolete
특성, 보안 고려 사항의 특성, COM 지원 특성, 코드 소유권과 관련된 특성 및 형식을 serialize할 수 있는지 여부를 나타내는 특성이 포함됩니다. 다음 예제에서는 Obsolete
특성을 사용하는 방법을 보여 줍니다.
open System
[<Obsolete("Do not use. Use newFunction instead.")>]
let obsoleteFunction x y =
x + y
let newFunction x y =
x + 2 * y
// The use of the obsolete function produces a warning.
let result1 = obsoleteFunction 10 100
let result2 = newFunction 10 100
assembly
및 module
특성 대상의 경우 어셈블리의 최상위 do
바인딩에 특성을 적용합니다. 다음과 같이 assembly
또는 ``module``
단어를 특성 선언에 포함할 수 있습니다.
open System.Reflection
[<assembly:AssemblyVersionAttribute("1.0.0.0")>]
[<``module``:MyCustomModuleAttribute>]
do
printfn "Executing..."
do
바인딩에 적용된 특성의 특성 대상을 생략하면 F# 컴파일러가 해당 특성에 적합한 특성 대상을 확인하려고 시도합니다. 많은 특성 클래스에는 해당 특성에 대해 지원되는 가능한 대상에 대한 정보가 포함된 System.AttributeUsageAttribute
형식의 특성이 있습니다.
System.AttributeUsageAttribute
특성이 함수를 대상으로 지원한다는 것을 나타내면 해당 특성이 프로그램의 주 진입점에 적용됩니다.
System.AttributeUsageAttribute
특성이 어셈블리를 대상으로 지원한다는 것을 나타내는 경우, 컴파일러는 해당 특성을 어셈블리에 적용합니다. 대부분의 특성은 함수와 어셈블리 모두에 적용되지 않지만, 이러한 특성이 적용되는 경우 해당 특성은 프로그램의 주 함수에 적용됩니다. 특성 대상이 명시적으로 지정되면 지정된 대상에 특성이 적용됩니다.
일반적으로 특성 대상을 명시적으로 지정할 필요는 없지만 사용 예와 함께 특성의 대상 유효한 값은 다음 표에 나와 있습니다.
속성 대상 | 본보기 |
---|---|
집회 |
|
모듈 |
|
메서드 |
|
수업 |
|
구조체 |
|
인터페이스 |
|
enum |
|
생성자 |
|
돌아오다 |
|
분야 |
|
재산 |
|
파라미터 |
|
유형 |
|
참조
.NET