覆盖重写方法(C#)

Rob*_*t W 37 c# inheritance

我试图在C#中覆盖一个重写的方法(如果这有意义!).

我有一个类似于下面的场景,但是当我在"C"类的SampleMethod()中有一个断点时,它没有被击中,而"B"方法中的相同断点被击中.

public class A
{
      protected virtual void SampleMethod() {}
}

public class B : A 
{
      protected override void SampleMethod()
      {
           base.SampleMethod(); 
      }
}

public class C : B
{
      protected override void SampleMethod() 
      {
           base.SampleMethod(); 
      }
}
Run Code Online (Sandbox Code Playgroud)

提前致谢!


编辑:

好的,上下文会有所帮助:

这是在复合控件的上下文中,因此类A继承CompositeControl并在覆盖CreateChildControls()方法后调用SampleMethod().

Nol*_*rin 39

只要您愿意,就可以在链中执行覆盖.您显示的代码是正确的.

您所看到的行为唯一可能的解释是您所引用的对象实际上是类型B.我建议您仔细检查一下,如果事情仍然没有意义,请发布其他合适的代码.


Col*_*kay 17

在没有看到调用SampleMethod的代码的情况下,我的猜测是你有一个类型为B的对象并在其上调用SampleMethod.