C#中判断一个方法是否覆盖(override)了父类的方法

来源:互联网 发布:java报表怎么做 编辑:程序博客网 时间:2024/05/28 09:33
MethodInfo.DeclaringType 用来获取声明这个方法的类。利用这个属性就可以区分子类的方法是继承自父类的,还是覆盖了父类的方法。

 

  1. namespace ConsoleApp
  2. {
  3.     class Program
  4.     {
  5.         class Base
  6.         {
  7.             public virtual void Func() { }
  8.         }
  9.         class A1 : Base
  10.         {
  11.             public override void Func() { }
  12.         }
  13.         class A2 : Base
  14.         {
  15.         } 
  16.         static void Main(string[] args)
  17.         {
  18.             Base a1 = new A1();
  19.             Base a2 = new A2();
  20.             MethodInfo m1 = a1.GetType().GetMethod("Func");
  21.             MethodInfo m2 = a2.GetType().GetMethod("Func");
  22.             System.Console.WriteLine("m1.DeclaringType = [" + m1.DeclaringType + "] ,for short [" + m1.DeclaringType.Name + "]");
  23.             System.Console.WriteLine("m2.DeclaringType = [" + m2.DeclaringType + "] ,for short [" + m2.DeclaringType.Name + "]");
  24.             bool derived1 = m1.DeclaringType.Equals(typeof(Base));//false
  25.             bool derived2 = m2.DeclaringType.Equals(typeof(Base));//true
  26.             System.Console.WriteLine("derived1 = " + derived1);
  27.             System.Console.WriteLine("derived2 = " + derived2);
  28.             System.Console.ReadLine();
  29.         }
  30.     }
  31. }

输出:

m1.DeclaringType = [ConsoleApp.Program+A1] ,for short [A1]
m2.DeclaringType = [ConsoleApp.Program+Base] ,for short [Base]
derived1 = False
derived2 = True