为什么基类里要去判断这个问题呢?从面向对象的角度,这样做会出现对象职责泛滥的问题,因为它关心了本不应该关心的事情。 事实上,B继承于A,A中有个virtual方法,B override了这个方法,那么,下面的代码会使得程序去执行B里的这个方法:A b = new B(); b.XXX();由此可见,到底是调用了A中的方法,还是B中的方法,是由调用方决定的。
public class A { public A() { MethodInfo Test = this.GetType().GetMethod("Test"); if(Test.DeclaringType.Equals(typeof(A))) { MessageBox.Show("为实现Test"); } else { MessageBox.Show("实现Test"); }
} public virtual void Test() { } } public class B : A { public override void Test() { }
事实上,B继承于A,A中有个virtual方法,B override了这个方法,那么,下面的代码会使得程序去执行B里的这个方法:A b = new B();
b.XXX();由此可见,到底是调用了A中的方法,还是B中的方法,是由调用方决定的。
{
public A()
{
MethodInfo Test = this.GetType().GetMethod("Test"); if(Test.DeclaringType.Equals(typeof(A)))
{
MessageBox.Show("为实现Test");
}
else
{
MessageBox.Show("实现Test");
}
} public virtual void Test()
{
}
} public class B : A
{
public override void Test()
{
}
}