일부 메소드에 다른 속성을 넣을 것을 제외하고는 기존 인터페이스와 동일한 모든 멤버를 사용하여 런타임에 새 인터페이스를 생성해야합니다 (일부는 속성 매개 변수는 런타임까지 알려지지 않음). 어떻게 성취 될 수 있습니까?.NET의 Reflection.Emit을 사용하여 인터페이스 생성
7
A
답변
8
귀하의 질문은 그다지 구체적이지 않습니다. 자세한 정보로 업데이트하면 추가 답변으로이 답변을 완성 해 보겠습니다.
다음은 관련된 수동 단계의 개요입니다.
- 는 DefineType와 타입을 만들기를 DefineDynamicAssembly
- 으로 DefineDynamicModule
- 가진 모듈 어셈블리를 만드는. 유형을 인터페이스로 만들려면
TypeAttributes.Interface
을 전달해야합니다. - 원래 인터페이스의 멤버를 반복하고 새 인터페이스에서 유사한 메서드를 빌드하고 필요에 따라 특성을 적용합니다.
TypeBuilder.CreateType
으로 전화를 걸어 인터페이스 구축을 완료하십시오.
12
동적 특성이있는 인터페이스의 어셈블리를 만들려면 :
using System.Reflection;
using System.Reflection.Emit;
// Need the output the assembly to a specific directory
string outputdir = "F:\\tmp\\";
string fname = "Hello.World.dll";
// Define the assembly name
AssemblyName bAssemblyName = new AssemblyName();
bAssemblyName.Name = "Hello.World";
bAssemblyName.Version = new system.Version(1,2,3,4);
// Define the new assembly and module
AssemblyBuilder bAssembly = System.AppDomain.CurrentDomain.DefineDynamicAssembly(bAssemblyName, AssemblyBuilderAccess.Save, outputdir);
ModuleBuilder bModule = bAssembly.DefineDynamicModule(fname, true);
TypeBuilder tInterface = bModule.DefineType("IFoo", TypeAttributes.Interface | TypeAttributes.Public);
ConstructorInfo con = typeof(FunAttribute).GetConstructor(new Type[] { typeof(string) });
CustomAttributeBuilder cab = new CustomAttributeBuilder(con, new object[] { "Hello" });
tInterface.SetCustomAttribute(cab);
Type tInt = tInterface.CreateType();
bAssembly.Save(fname);
을 다음 만듭니다 :
namespace Hello.World
{
[Fun("Hello")]
public interface IFoo
{}
}
추가 방법은 TypeBuilder.DefineMethod를 호출하여 MethodBuilder 클래스를 사용합니다.
관련 문제
- 1. .NET 유형이 동적인지 확인 (Reflection.Emit을 사용하여 생성)
- 2. .Net의 인터페이스
- 3. .NET의 IRAPIStream COM 인터페이스
- 4. Reflection.Emit을 사용하여 "using (x) {...}"블록을 방출 하시겠습니까?
- 5. .NET의 CodeDom을 사용하여 열거 형 생성
- 6. .NET의 볼록 선체 생성
- 7. Reflection.Emit을 사용하여 인터페이스를 구현하는 클래스 만들기
- 8. Reflection.emit을 사용하여 런타임에 메서드를 만드는 방법
- 9. Reflection.Emit을 사용하는 Expression.Convert와 같습니다.
- 10. Ant를 사용하여 인터페이스 용 Javadoc 생성?
- 11. Dynamic 또는 Reflection.emit을 사용하십시오.
- 12. .net의 동적 원형 차트 생성
- 13. .NET의 WSDL에서 클라이언트 코드 생성
- 14. Reflection.Emit을 사용하여 작업을 쉽게 할 수있는 도구가 있습니까?
- 15. 데이터베이스 모델에서 사용자 인터페이스 생성
- 16. 어떻게 Reflection.Emit을 사용하여 리터럴 식을 삽입 할 수 있습니까?
- 17. Java 기본 인터페이스 생성 문제
- 18. Java를 사용하여 보고서 생성
- 19. Reflection.Emit을 사용하여 스택에서 MethodInfo 인스턴스를 사용하는 메서드 호출
- 20. .Net의 RCW COM 개체 생성 매개 변수 (즉 요청 된 인터페이스)를 관리하는 방법은 무엇입니까?
- 21. 인터페이스 용 독립 모듈 생성
- 22. .net의 개체 ID를 기반으로 해시 코드 생성
- 23. 명시 적 인터페이스 구현 및 Reflection.Emit
- 24. .Net의 동적 DTO?
- 25. .NET의 gridview에서 jQuery를 사용하여 정렬합니까?
- 26. 사용하여 CLR 인터페이스
- 27. 사용자 생성 그래프 용 인터페이스 구축
- 28. ASP.NET MVC 컨트롤러/액션 인터페이스 생성 도구?
- 29. 자바 스크립트로 완전히 생성 된 사용자 인터페이스?
- 30. Eclipse의 솔리드 클래스 파일에서 인터페이스 생성
Nah, 멋지다. Reflection.Emit을 사용할 필요가 없기 때문에 누군가가 사악한 마스터 플랜에서 걸림돌을 발견 할 수 있는지보고 싶었습니다. –