来自静态上下文的虚方法

时间:2014-02-24 13:27:36

标签: c# oop

我有BaseProgram作为所有其他程序的基类 我想在此类中添加一个可覆盖的方法HandleException()以进行错误处理 从该BaseProgram派生的所有程序都应该可以选择编写自己的HandleException()版本。

所以,我必须将HandleException()声明为virtual方法,如下所示:

abstract class BaseProgram
{
    public abstract void Run();

    public static void RunWithExceptionHandling(BaseProgram programToRun)
    {
        try
        {
            //do some processing 
            programToRun.Run();
        }
        catch (Exception)
        {
           HandleException();  //Error : Can't access non-static method in static context
        }
    }

    public virtual void HandleException()
    { 
        //Do some basic exception handling here
    }
}

但是我不能在静态方法的catch块中调用这个新的虚方法:RunWithExceptionHandling() 此外,由于应用程序设计,我无法将RunWithExceptionHandlingstatic更改为非static: - (

任何想法如何解决此问题,以便我可以允许派生类拥有自己的HandleException()版本?

1 个答案:

答案 0 :(得分:6)

嗯,你有实例;你只需要用它来调用方法。如果存在HandleException,那将调用public static void RunWithExceptionHandling(BaseProgram programToRun) { try { //do some processing programToRun.Run(); } catch (Exception) { programToRun.HandleException();//Use the instance :) } } 的派生版本。

{{1}}