리플렉션 내보내기를 사용하여 형식 정의

형식은 동적 모듈 범위에서 ModuleBuilder.DefineType 메서드를 사용하여 정의됩니다. DefineTypeTypeBuilder를 반환합니다. 이 항목에서 형식 이름은 항상 네임스페이스를 포함하는 전체 경로 이름입니다. 예를 들어, 형식 이름이 Aaa.Bbb.Ccc이면 Aaa.Bbb는 네임스페이스로 간주됩니다.

리플렉션 내보내기에서는 형식을 정의하는 데 다음과 같은 옵션을 제공합니다.

  • 지정한 이름을 사용하여 클래스나 인터페이스를 정의합니다.

  • 지정한 이름과 특성을 사용하여 클래스나 인터페이스를 정의합니다.

  • 지정한 이름, 특성 및 기본 클래스를 사용하여 클래스를 정의합니다.

  • 지정한 이름, 특성, 기본 클래스 및 클래스에서 구현하는 인터페이스 집합을 사용하여 클래스를 정의합니다.

  • 지정한 이름, 특성, 기본 클래스 및 압축 크기를 사용하여 클래스를 정의합니다.

  • 지정한 이름, 특성, 기본 클래스 및 전체 클래스 크기를 사용하여 클래스를 정의합니다.

  • 지정한 이름, 특성, 기본 클래스, 압축 크기 및 전체 클래스 크기를 사용하여 클래스를 정의합니다.

형식을 사용하기 전에 TypeBuilder.CreateType 메서드를 호출해야 합니다. CreateType은 해당 형식을 만듭니다. CreateType을 호출하면 호출자는 Activator.CreateInstance 메서드를 사용하여 해당 형식을 인스턴스화하고 Type.InvokeMember 메서드를 사용하여 해당 형식의 멤버를 호출합니다. CreateType을 호출한 후 형식의 구현을 변경하는 메서드를 호출하면 오류가 발생합니다. 예를 들어, 호출자가 새 멤버를 형식에 추가하려고 하면 공용 언어 런타임에서 예외가 throw됩니다.

클래스 이니셜라이저는 TypeBuilder.DefineTypeInitializer 메서드를 사용하여 만들어집니다. DefineTypeInitializerConstructorBuilder를 반환합니다.

중첩 형식은 TypeBuilder.DefineNestedType 메서드 중 하나를 사용하여 정의됩니다.

TypeBuilder.AddDeclarativeSecurity 메서드는 작성되는 형식에 선언적 보안을 추가합니다. 보안 동작(예: Demand, Assert, Deny)과 이 동작이 적용되는 권한 집합을 지정하려고 호출할 때마다 AddDeclarativeSecurity를 여러 번 호출할 수 있습니다.

특성

  • TypeAttributes.InterfaceTypeAttributes.Abstract 특성을 사용하여 인터페이스를 지정합니다.

  • TypeAttributes.Sealed 특성을 사용하여 구체적인 클래스(확장할 수 없는 클래스)를 지정합니다.

  • 여러 특성에 의해 형식 표시가 달라집니다. TypeAttributes 열거형의 설명을 참조하십시오.

  • TypeAttributes.LayoutSequential을 지정한 경우 클래스 로더는 메타데이터에서 읽혀지는 순서대로 필드를 표시합니다. 클래스 로더는 지정한 압축 크기는 고려하지만 지정한 필드 오프셋은 무시합니다. 메타데이터는 필드 정의가 내보내진 순서를 유지합니다. 병합에서도 메타데이터는 필드 정의 순서를 다시 정렬하지 않습니다. TypeAttributes.ExplicitLayout을 지정한 경우에만 로더는 지정한 필드 오프셋을 고려합니다.

알려진 문제

  • 리플렉션 내보내기에서는 인터페이스를 구현하는 비추상 클래스에서 인터페이스에 선언된 모든 메서드를 구현했는지 여부를 확인하지 않습니다. 그러나 클래스에서 인터페이스에 선언된 모든 메서드를 구현하지 않을 경우 런타임에서는 해당 클래스를 로드하지 않습니다.

  • TypeBuilderType에서 파생되더라도 Type 클래스에 정의된 일부 추상 메서드는 TypeBuilder에서 완전히 구현되지 않습니다. 이러한 TypeBuilder 메서드는 NotSupportedException을 throw합니다. Type.GetType이나 Assembly.GetType을 사용하여 만든 형식을 검색하고 검색된 형식을 반영하여 원하는 기능을 가져올 수 있습니다.

참고 항목

기타 리소스

리플렉션 내보내기 사용