MethodInfo.DeclaringType 用来获取声明这个方法的类。利用这个属性就可以区分子类的方法是继承自父类的,还是覆盖了父类的方法。
- namespace ConsoleApp
- {
- 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.DeclaringType = [" + m1.DeclaringType + "] ,for short [" + m1.DeclaringType.Name + "]");
- System.Console.WriteLine("m2.DeclaringType = [" + m2.DeclaringType + "] ,for short [" + m2.DeclaringType.Name + "]");
- bool derived1 = m1.DeclaringType.Equals(typeof(Base));//false
- bool derived2 = m2.DeclaringType.Equals(typeof(Base));//true
- System.Console.WriteLine("derived1 = " + derived1);
- System.Console.WriteLine("derived2 = " + derived2);
- System.Console.ReadLine();
- }
- }
- }
输出:
m1.DeclaringType = [ConsoleApp.Program+A1] ,for short [A1]
m2.DeclaringType = [ConsoleApp.Program+Base] ,for short [Base]
derived1 = False
derived2 = True