相关疑难解决方法(0)

为什么基类的成员与派生类中的同一成员不同?

这是此问题的后续内容:Lambda表达式未返回预期的MemberInfo

class Human
{
    public string name { get; set; }
}

class Man : Human
{

}

var m1 = typeof(Human).GetProperty("name");
var m2 = typeof(Man).GetProperty("name");

//m1 != m2 why?
Run Code Online (Sandbox Code Playgroud)

这同样适用于MethodInfo秒.

我可以理解,必须有一个差时Human是一个接口,或当nameHuman是抽象/虚拟的.但为什么密封型呢?不是nameMan确切nameHuman

澄清:乔恩说他们ReflectedType的不同.ReflectedType在决定接口成员或被覆盖成员的相等性时,平等应该会派上用场,因为它们是不同的.但我不认为应该考虑决定上述简单案件的平等性.可能是设计团队希望保持一致.只是想知道是什么原因促使框架设计者ReflectedType在决定跨越多个类的同一成员的相等性时考虑属性.

.net inheritance propertyinfo methodinfo fieldinfo

4
推荐指数
1
解决办法
191
查看次数

RuntimeMethodInfo相等:bug?

让我们开始:

using System;

public class Program
{
    class A
    {
        public virtual void Do() { }
    }

    class B:A
    {
    }

    public static void Main()
    {
        var m1 = typeof(A).GetMethod("Do");
        var m2 = typeof(B).GetMethod("Do");

        Console.WriteLine("Methods are equal?\t\t{0}", m1 == m2);
        Console.WriteLine("Method handles are equal?\t{0}", m1.MethodHandle == m2.MethodHandle);

        Console.WriteLine("Done.");
        Console.ReadKey();
    }
}
Run Code Online (Sandbox Code Playgroud)

(在ideone 在线试试)

所以,有两个不相等的MethodInfo实例,都包含相同的方法句柄.这是equals运算符源:

public static bool operator ==(MethodInfo left, MethodInfo right)
{
    if (ReferenceEquals(left, right))
        return true;

    if ((object)left == null || (object)right == …
Run Code Online (Sandbox Code Playgroud)

.net c# reflection

3
推荐指数
1
解决办法
367
查看次数