using System;

// Custom Exception types
class AException : Exception
{
}

class BException : Exception
{
}

class Test
{
    public static void Main(string[] args)
    {
        try
        {
            throw new AException();
        }
        catch (Exception ex)
        {
            Callme(ex);
        }
    }
    public static void Callme(AException aexception) {}
    public static void Callme(BException bexception) {}
    public static void Callme(Exception ex) {}
}


Callme(ex)将始终调用Callme(Exception ex)而不是Callme(AException ..) ..这是预期的行为。我读过方法重载解析确实可以处理继承关系。

最佳答案

有一种更可接受的方法。尝试以下方法:

        try
        {
            throw new AException();
        }
        catch (AException aex)
        {
            Callme(aex);
        }
        catch (BException bex)
        {
            Callme(bex);
        }
        catch (Exception ex)
        {
            Callme(ex);
        }

10-07 12:10