Class Base
{
    virtual void Func() {}
}Class A1:Base
{
    override void Func() {}
}Class A2:Base
{    
}其中A1重载了Func函数,而A2没重载,已知一个实例 例如 Base a1=new A1(); 或者 a2=new A2();
怎么根据实例a1,a2判断 出A1重载了父类的函数 而A2没有重载

解决方案 »

  1.   


    class Program
        {
            class Base
            {
                public virtual void Func() { }
            }        class A1 : Base
            {
                public override void Func() { }
            }        class A2 : Base
            {
            } 
            static void Main(string[] args)
            {
                Base a1 = new A1(); 
                Base a2 = new A2();
                MethodInfo m1 = a1.GetType().GetMethod("Func");
                MethodInfo m2 = a2.GetType().GetMethod("Func");
                System.Console.WriteLine("m1 is declared in " + m1.DeclaringType.Name);
                System.Console.WriteLine("m2 is declared in " + m2.DeclaringType.Name);
                
                System.Console.ReadLine();        }
    }输出:
    m1 is declared in A1
    m2 is declared in Base可以用 if (m1.DeclaringType.Equals(typeof(Base))){...} 来判断是不是从基类继承来的方法。