2010-04-09 80 views
4

我有一个基类,我想捕获基类内派生类的所有异常,这可能吗?从类的基类捕获的异常

你不会知道派生类中的方法是什么。

+0

你可以添加一些代码来解释你的场景吗? – Jakob 2010-04-09 10:02:12

+0

如果派生类有一些不调用基类的方法会怎么样?您的需求似乎不可能以通用的方式实现。 – Vlad 2010-04-09 10:03:55

+0

你是什么意思,“调用类”? – 2010-04-09 10:04:05

回答

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 { /* ... */ } 
    } 
} 
+0

是的,这是一种可能的方法,你可以在不使用抽象类的情况下做到这一点,因为我不知道@Coppermill派生类 – Coppermill 2010-04-09 12:50:15

+1

的方法是什么,这种方法只适用于你想要捕获异常的方法在基类的合同中定义。这种方法不适用于基类不知道的方法。 – 2010-04-09 13:40:30

1

通过调用类你是指一个派生类,或者是一个从你的基类派生的类的非相关类调用方法?

我想你可以做你的基地变成代理类。看一个dynamic proxy的例子。