.NET 4.5 (2012)부터 일부 새로운 확장 방법이 표시됩니다 (System.Reflection.RuntimeReflectionExtensions
class). 그러나 새로운 방법은 우리에게 새로운 것을주지 않는 것 같습니다. 예 :System.Reflection.RuntimeReflectionExtensions에있는 메서드의 용도는 무엇입니까?
static void Main()
{
var prop1 = typeof(string).GetProperty("Length");
var prop2 = typeof(string).GetRuntimeProperty("Length"); // extension, needs: using System.Reflection;
Console.WriteLine(prop1 == prop2);
Action a = Main;
var meth1 = a.Method;
var meth2 = a.GetMethodInfo(); // extension, needs: using System.Reflection;
Console.WriteLine(meth1 == meth2);
}
이것은 True
을 두 번 씁니다.
(여기에는 ==
연산자가 오버로드되어 있지만 참조 동등성을 (object)prop1 == (object)prop2
및 (object)meth1 == (object)meth2
으로 지정하면 True
이됩니다).
그럼 공개적으로 볼 수있는 새로운 방법의 목적은 무엇입니까? 분명히 나는 뭔가를 간과하거나 오해해야합니다.
또한 내부적으로'GetRuntimeProperty'가 동일한'type.GetProperty (name) '메소드를 실행하기 때문에이 메소드가 존재하는 이유를 모르겠습니다. –
목적이 없습니다. 그것은 완전히 중복됩니다. 디 컴파일 된 코드를 보면, 그 코드가 얼마나 무의미한 지 알 수 있습니다. 코드베이스에 들어간 누군가가 잠 들어 있었다고 생각해보십시오. – leppie
이것은 WinRT를 지원하기 위해 추가해야했습니다. 어떤 기반으로 COM, 그것은 반사를 지원하지 않습니다. 기본 유형 시스템을 숨기려면 CLR에 내장 된 언어 프로젝션에 숨어있는 많은 단점이 있습니다. 매우 미묘한 것은 없지만 문자열은 WinRT의 * 매우 다른 유형입니다. 그러나 완벽하지는 않습니다. 정확히 어떻게 에뮬레이션하는지 모릅니다. –