2016-12-29 1 views
3

나는 Type, FieldInfoMethodInfo에 대해 다음 .NET 유형과 기능을 본 적이 :.NET RuntimePropertyHandle 및 PropertyInfo.GetPropertyFromHandle이없는 이유는 무엇입니까?

RuntimeTypeHandle th = ...; 
Type t = Type.GetTypeFromHandle(th); 

RuntimeFieldHandle fh = ...; 
FieldInfo f = FieldInfo.GetFieldFromHandle(fh); 

RuntimeMethodHandle mh = ...; 
MethodInfo m = MethodBase.GetMethodFromHandle(mh); 

그러나 속성에 대한 해당 핸들의 종류와 Get...FromHandle있을 나타나지 않습니다. 내가 보지 않는 사람이 있습니까, 아니면 이것이 존재하지 않는 이유가 있습니까? 어떤

이. 나는 이미 내가 관심이있는 속성에 대한 속성 토큰에 액세스 할 때 Type.GetProperty를 사용하여 PropertyInfo를 조회해야 할

+0

어디서 핸들과 토큰을 얻을 수 있습니까? 문제가 아니라 호기심. – IllidanS4

+0

@James 왜냐하면 당신은 Get ... FromHandle을 파일로 저장하고 메소드와 속성, 이벤트를 저장하고 메소드를 저장하기 때문입니다. 메타 데이터에는 속성과 같은 것이 없습니다. C#. –

답변

1

coreclr으로 표시, 속성을 매우 비효율적 인 것 같습니다 및 이벤트 그러므로, 핸들이 없습니다 Runtime...Handle 또는 Get...FromHandle입니다. "핸들"을 생각하는 것은 단순히 상황에 맞지 않습니다.

이유는 필자가 생각하기에 속성과 이벤트가 메타 데이터 일 뿐이며 메서드와 필드는 훨씬 더 많습니다. 메서드, 필드 및 유형에 액세스하기위한 CIL opcode가 있지만 속성이나 이벤트에는 사용되지 않습니다. 이들을 사용하면 각각의 접근 자 메서드 중 하나를 사용하여 CIL로 컴파일됩니다. 말 그대로 런타임을위한 메타 데이터 조각 일 뿐이므로 핸들이 필요하지 않습니다.

나는 자신에게 similar question을 물었습니다. 그리고 실제로 속성과 이벤트를 해결하는 방법이 제한되어 있습니다. 귀하의 기본 질문에 관해서는 모든 속성을 열거하고 GetProperty을 사용하는 것보다 MetadataToken을 찾는 것이 더 효율적일지도 모르겠지만, 나는 그것을 테스트하고 싶습니다.

관련 문제