두 개의 서로 다른 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
, 대한 MethodInfo
가 Foo<T>.f
여부를 확인해야하는 코드) Foo<object>.f
와 Foo<string>.f
이 같은 방법으로 핸들을있는에 의존하는 코드를 가지고 있기 때문에 내가 특별히 부탁 해요 , 그리고 그 코드를 다시 작성해야하는지 알고 싶습니다.
'MethodInfo'는 특정 어셈블리의 메소드를 나타내는 것으로 알려져 있지 않지만, 선언 타입의 어셈블리 (또는 MethodInfo의'Module' 속성)와 'MetadataToken'을 검사하는 것은 실행할 수있는 대안, 감사합니다. 'MethodHandle' 접근법이 신뢰할 만하다는 보장으로 아무도 대답하지 않으면, 나는 그걸로 갈 것입니다. – hvd