父类

时间:2015-08-12 19:43:59

标签: c# inheritance logging

我有很多类都继承自一个基类。所以我想记录请求(只是方法的输入参数),响应(如果有的话)和任何异常(如果有的话)。

我可以继续修改所有方法来执行此操作,将来所有方法都需要实现这一点。

或者我在想是否有办法在基类中记录此信息,以便我可以只更新基类而不更新子类方法。我不确定是否有可能这样做?如果没有,最好的方法是做这样的事情吗?

编辑:这是一个Web应用程序(MVC),所有控制器都继承自基类,我需要记录所有操作方法命中(请求,响应,异常等)

感谢。

1 个答案:

答案 0 :(得分:0)

是的,有办法做到这一点,但它可能会变得混乱。这是一个实现:

public abstract class BaseClass
{
    public void DoSomething(int one, int two, int three)
    {
        Log(string.Format("Method: DoSomething({0}, {1}, {2})", one, two, three));

        try
        {
            DoSomethingInternal(one, two, three);
        }
        catch (Exception ex)
        {
            Log(string.Format("Method: DoSomething Exception: " + ex.ToString()));
            throw ex;
        }
    }

    public abstract void DoSomethingInternal(int one, int two, int three);
}

public class ChildClass : BaseClass
{
    public override void DoSomethingInternal(int one, int two, int three)
    {
        throw new Exception("I have no idea what to do");
    }
}

这些方法实际上存在于基类中,该基类调用子类实现的抽象方法。这些可以包含在try / catches中以捕获任何错误。 C#6使用异常过滤器变得更容易,但我将由您决定使用。