从类的基础部分捕获异常

4
我有一个基类,我想在基类中捕获所有派生类的异常,这可能吗?
您不会知道派生类的方法是什么。

你能否添加一些代码来解释你的情境? - Jakob
如果派生类有一些不调用基类的方法怎么办?您的要求似乎无法以通用方式实现。 - Vlad
“the calling class” 是什么意思? - Marcelo Cantos
你的意思是派生类中的所有异常吗? - Daniel Elliott
2个回答

2

您需要提供更多关于您特定情境的细节。但是,例如,如果您有一个基本的抽象类,它提供了一个契约,当调用基类契约时,您想捕获派生类抛出的所有可能的异常,您可以像这样做:

public abstract class Base
{
    protected abstract void InternalFoo();
    protected abstract void InternalBar();

    public void Foo()
    {
        try { this.InternalFoo(); }
        catch { /* ... */ }
    }

    public void Bar()
    {
        try { this.InternalBar(); }
        catch { /* ... */ }
    }
}

是的,这是一种可能的方法。您能否在不使用抽象类的情况下完成此操作?因为我将无法从派生类中知道这些方法是什么。 - Coppermill
1
@Coppermill,这种方法只有在你想要捕获异常的方法在基类的契约中定义时才可行。对于基类不知道的方法,这种方法将无法工作。 - João Angelo

1
你所说的“调用类”,是指派生类还是非相关类调用从基类派生的类的方法?
我猜你可以将你的基类转换为代理类来实现这一点。请参考动态代理示例。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接