为什么不是C#的memberinfo()反射函数

ja7*_*a72 5 c# reflection language-design

sizeof()typeof(),但为什么不memberinfo()返回的实例System.Reflection.MemberInfo为代码,以便在反射代码,以帮助选择的一部分.

例:

Program() 
{
       Type t = typeof(Foo);

       Foo foo = new Foo();
       PropertyInfo pi = memberinfo(Foo.Name) as PropertyInfo;
       // or shall it be like this
       // PropertyInfo pi = memberinfo(foo.Name) as PropertyInfo;

       string name = pi.GetValue(foo, null);
}
Run Code Online (Sandbox Code Playgroud)

我试图了解是否有一个根本原因可以在C#规范中实现.

我不是在抨击任何事情,我只是在做一些一厢情愿的想法,所以请善待.

Wes*_*ser 8

Eric Lippert在他的博客上对此进行了广泛的讨论

直接引用该帖子:

在我的脑海中,这里有几个{为什么没有这样做的原因}.(1)您如何明确指定您想要特定显式接口实现的方法信息?(2)如果由于无法访问,重载决策会跳过特定方法会怎么样?获取无法访问的方法的方法信息是合法的; 元数据始终是公共的,即使它描述了私有细节.我们是否应该无法获取私有元数据,使功能变弱,或者我们应该使其成为可能,并使信息使用与C#其他部分完全不同的重载决策算法?(3)如何指定您想要索引器设置器,属性获取器或事件处理程序加法器的信息?


Jar*_*Par 5

有几个项目使这种类型的功能很难.其中一个主要是重载方法.

class Example { 
  public void Method() {}
  public void Method(int p1) {}
}
Run Code Online (Sandbox Code Playgroud)

MethodInfo以下哪个会回归?

var info = memberinfo(Example.Method);
Run Code Online (Sandbox Code Playgroud)

正如韦斯利指出的那样,埃里克的博客对此问题进行了全面讨论.