리플렉션 내보내기를 사용하여 메서드 정의
이 단원에서는 리플렉션 내보내기를 사용하여 전역 메서드를 정의하고 메서드를 형식 멤버로 정의하는 방법을 설명합니다. 메서드를 정의하는 API는 MethodBuilder 개체를 반환합니다.
MethodBuilder.AddDeclarativeSecurity 메서드는 선언적 보안을 작성되는 메서드에 추가합니다. 보안 동작(예: Demand, Assert, Deny)과 이 동작이 적용되는 권한 집합을 지정하려고 호출할 때마다 AddDeclarativeSecurity를 여러 번 호출할 수 있습니다.
전역 메서드는 ModuleBuilder.DefineGlobalMethod 메서드를 사용하여 정의합니다. DefineGlobalMethod에서는 MethodBuilder를 반환합니다.
전역 메서드는 정적이어야 합니다. 동적 모듈에 전역 메서드가 포함된 경우 동적 모듈이나 포함하는 동적 어셈블리를 저장하기 전에 ModuleBuilder.CreateGlobalFunctions 메서드를 호출해야 합니다. 공용 언어 런타임에서는 모든 전역 함수를 정의할 때까지 동적 모듈의 수정을 연기하기 때문입니다.
전역 네이티브 메서드는 ModuleBuilder.DefineGlobalMethod 메서드를 사용하여 정의합니다. 플랫폼 호출(PInvoke) 메서드는 추상이나 가상으로 선언하지 말아야 합니다. 런타임에 플랫폼 호출 메서드에 대한 MethodAttributes.PinvokeImpl 특성을 설정합니다.
메서드는 TypeBuilder.DefineMethod 메서드를 사용하여 형식 멤버로 정의됩니다. DefineMethod에서는 MethodBuilder를 반환합니다.
DefineParameter 메서드는 매개 변수나 반환 값의 이름 및 매개 변수 특성을 설정하는 데 사용합니다. 이 메서드에서 반환하는 ParameterBuilder 개체는 매개 변수 또는 반환 값을 나타냅니다. ParameterBuilder 개체를 사용하면 마샬링을 설정하거나 상수 값을 설정하거나 사용자 지정 특성을 적용할 수 있습니다.
참고 |
---|
.NET Framework 버전 1.0 및 1.1에서는 반환 값에 DefineParameter 메서드를 사용할 수 없습니다. |
특성
정적 메서드는 MethodAttributes.Static 특성을 사용하여 지정됩니다.
재정의할 수 없는 마지막 메서드는 MethodAttributes.Final 특성을 사용하여 지정됩니다.
가상 메서드는 MethodAttributes.Virtual 특성을 사용하여 지정됩니다.
추상 메서드는 MethodAttributes.Abstract 특성을 사용하여 지정됩니다.
여러 특성에 의해 메서드 표시가 달라집니다. MethodAttributes 열거형의 설명을 참조하십시오.
오버로드된 연산자를 구현하는 메서드에서는 MethodAttributes.SpecialName 특성을 설정해야 합니다.
종료자에서는 MethodAttributes.SpecialName 특성을 설정해야 합니다.
알려진 문제
MethodBuilder가 MethodInfo에서 파생되더라도 MethodInfo 클래스에 정의된 일부 추상 메서드는 MethodBuilder에서 완전히 구현되지 않습니다. 이러한 MethodBuilder 메서드는 NotSupportedException을 throw합니다. 예를 들어, MethodBuilder.Invoke 메서드는 완전히 구현되지 않습니다. Type.GetType 또는 Assembly.GetType을 사용하여 바깥쪽 형식을 검색함으로써 이 메서드를 반영할 수 있습니다.
사용자 지정 한정자는 .NET Framework 버전 2.0에서는 지원되지만 이전 버전에서는 지원되지 않습니다.