2014-10-22 1 views
0

두 개의 서로 다른 MethodInfo 개체가있는 경우 해당 MethodHandle 값이 여전히 같은지 비교할 수 있습니다. 이것은 동일한 제네릭 형식의 두 가지 인스턴스화가 아닌 일반 메서드의 메서드 핸들을 가져올 때 발생할 수 있지만 항상 그런 것은 아닙니다. 실험적으로 정적 메소드의 경우가 아니라 인스턴스화 중 하나가 값 유형 인 경우를 결정할 수 있습니다.다른 MethodInfos의 RuntimeMethodHandles 두 개가 동등한 경우는 언제입니까?

using System; 

static class Program 
{ 
    static void Main() 
    { 
    Console.WriteLine("Foo<object>.f == Foo<string>.f: " + 
     (typeof(Foo<object>).GetMethod("f").MethodHandle == 
     typeof(Foo<string>).GetMethod("f").MethodHandle)); 
    Console.WriteLine("Foo<object>.f == Foo<int>.f: " + 
     (typeof(Foo<object>).GetMethod("f").MethodHandle == 
     typeof(Foo<int>).GetMethod("f").MethodHandle)); 
    Console.WriteLine("Foo<object>.g == Foo<string>.g: " + 
     (typeof(Foo<object>).GetMethod("g").MethodHandle == 
     typeof(Foo<string>).GetMethod("g").MethodHandle)); 
    Console.WriteLine("Foo<object>.g == Foo<int>.g: " + 
     (typeof(Foo<object>).GetMethod("g").MethodHandle == 
     typeof(Foo<int>).GetMethod("g").MethodHandle)); 
    Console.ReadKey(); 
    } 
} 

class Foo<T> 
{ 
    public void f() { } 
    public static void g() { } 
} 

출력 :

 
Foo<object>.f == Foo<string>.f: True 
Foo<object>.f == Foo<int>.f: False 
Foo<object>.g == Foo<string>.g: False 
Foo<object>.g == Foo<int>.g: False 

는 그러나, 나는 여기에 대한 공식 문서를 찾을 수 없습니다입니다. 내가 얻는 결과에 대한 보증이 있습니까? 다음 결과 중 .NET Framework의 향후 업데이트에서 이러한 결과 중 어떤 것이 안전 할 것이라고 가정 할 수 있습니까?

내가 (참조 형식으로 알려져있다 T 일부 T, 대한 MethodInfoFoo<T>.f 여부를 확인해야하는 코드) Foo<object>.fFoo<string>.f이 같은 방법으로 핸들을있는에 의존하는 코드를 가지고 있기 때문에 내가 특별히 부탁 해요 , 그리고 그 코드를 다시 작성해야하는지 알고 싶습니다.

답변

2

의미에 대한 명확한 정의가 RuntimeMethodHandle으로 표시되지 않습니다. 그러나 MethodInfoFoo<object>.f과 동일한 모듈에있는 경우 (다른 모듈은 메타 데이터 토큰 값을 공유 할 수 있지만 동일한 메타 데이터 토큰은 특정 모듈 내에서 하나의 의미 만 갖습니다) MethodInfo.MetadataToken을 대신 사용해야합니다. MethodInfo이 임의의 위치에서 온 경우 먼저 Module 속성의 동등성을 확인한 다음 MetadataToken 속성을 확인하십시오.

+0

'MethodInfo'는 특정 어셈블리의 메소드를 나타내는 것으로 알려져 있지 않지만, 선언 타입의 어셈블리 (또는 MethodInfo의'Module' 속성)와 'MetadataToken'을 검사하는 것은 실행할 수있는 대안, 감사합니다. 'MethodHandle' 접근법이 신뢰할 만하다는 보장으로 아무도 대답하지 않으면, 나는 그걸로 갈 것입니다. – hvd

관련 문제