我有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()
此外,由于应用程序设计,我无法将RunWithExceptionHandling
从static
更改为非static
: - (
任何想法如何解决此问题,以便我可以允许派生类拥有自己的HandleException()
版本?
答案 0 :(得分:6)
嗯,你有实例;你只需要用它来调用方法。如果存在HandleException
,那将调用public static void RunWithExceptionHandling(BaseProgram programToRun)
{
try
{
//do some processing
programToRun.Run();
}
catch (Exception)
{
programToRun.HandleException();//Use the instance :)
}
}
的派生版本。
{{1}}