.NET Framework 4.0은 Reflection API에 여러 항목을 도입하여 매우 유용하므로 중요한 작업입니다. 그 중에는 Assembly
, Module
, MethodBody
및 LocalVariableInfo
및 새로운 CustomAttributeData
클래스의 보호 된 생성자가 있습니다. 아직 해결해야 할 몇 가지 항목이 있습니다. 나는 사람들이 같은 그룹에 쉽게 적용된다고 믿는다. 나는 방금 언급 한 유형을 확장해야 할 것이다.`OpCode`의 인스턴스를 만들 수 있습니까?
이번에 : 나는 자신의 매개 변수를 사용하여 System.Reflection.Emit.OpCode
구조체의 인스턴스를 생성하는 방법을 찾고 있습니다. 현재 내부 생성자를 호출하여 인스턴스를 만듭니다. 생성 된 항목을 다시 사용하기 위해 클래스의 구성원 인 public static readonly
으로 노출하기 때문에 성능에 해가되지 않지만, 이것이 극도로 차선책 인 시나리오라고 생각할 수 있습니다.
ILGenerator
와 함께 사용할 수 없습니다 사용자 구성 OpCode
들 상태 문서와 현재의 내부 OpCode
생성자를 공개하는 것이 불가능하다 어떤 이유가 있나요.
편집 : 예를 들어 보겠습니다. 다음과 같은 사용자 지정 opcode를 작성하여 임시 로컬 변수를 만들지 않고도 중간 명령어 목록간에 바이트 코드 변환으로 사용할 수 있습니다. 일리노이를 방출하는 경우 나머지 swap
명령어를 유효한 IL 표현으로 변환 하겠지만 다음 단계는 사용자 정의 swap
명령어를 이해하는 JIT입니다. Prefix2
접두어 0xFD
을 사용하고 있는데, 유효한 IL 연산 코드에 의해 예약되어 사용되지 않습니다.
/// <summary>
/// Swaps adjacent elements on the evaluation stack. The supplied inline int32 argument gives the
/// index of the topmost item in the pair.
/// </summary>
public static readonly OpCode Swap;
또한 간단한/일반 관리 코드 표현을 가지고 있지만 다양한 네이티브 코드 생성기에서 사용할 수있는 간단한 플랫폼에 따라 표현이없는 JIT 내장이 사용할 것입니다. 이들 중 하나는 ldthread
(현재 관리되는 스레드의 RuntimeThread
표현에 대한 참조를로드 함)입니다.
1.0 이후로 주변에 있었던 http://msdn.microsoft.com/en-us/library/system.reflection.emit.opcode.aspx를 의미합니까? –
예, 그 중 하나입니다. –