Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在自定义基类上创建OneException事件_C# - Fatal编程技术网

C# 如何在自定义基类上创建OneException事件

C# 如何在自定义基类上创建OneException事件,c#,C#,我们有两个自定义类(基类和子类),子类继承自基类 当我们在childClass上获得异常时,应该调用基类上的OneException事件 这将类似于MVC控制器OneException事件 我们将使用日志记录。在一般情况下,这是不可能做到的。MVC OneException之所以有效,是因为框架捕获任何未处理的异常并将其转发给OneException。调用控制器操作的框架代码如下所示: try { controller.SomeAction(); } catch(Exception ex)

我们有两个自定义类(基类和子类),子类继承自基类 当我们在childClass上获得异常时,应该调用基类上的OneException事件

这将类似于MVC控制器OneException事件


我们将使用日志记录。

在一般情况下,这是不可能做到的。MVC OneException之所以有效,是因为框架捕获任何未处理的异常并将其转发给OneException。调用控制器操作的框架代码如下所示:

try
{
  controller.SomeAction();
}
catch(Exception ex)
{
  controller.OnException(ex);
}
整个实现取决于负责处理异常的代码调用方。对于任何代码都可以使用的常规调用,您不能对如何调用该类做出任何假设

如果我们能让所有调用都通过基类,我们就能做出类似的事情:

public class Base
{
  public BlahaMethod()
  {
    try
    {
      DoBlaha();
    }
    catch(Exception ex)
    {
      OnException(ex);
    }
  }

  protected abstract void DoBlaha();

  private void OnException(Exception ex)
  {
    // Handle exception
  }
}

public class Derived
{
  protected virtual void DoBlaha()
  {
    throw new NotImplementedException();
  }
}

您可以使用构造捕获异常。唯一的通用异常处理程序(我所知)是。

谢谢您的关注,但是我如何在继承的类上实现事件处理?我想在子类的方法中发生异常时调用基类。这个方法不必从基类重写,方法可以属于子类。我强烈建议您阅读我上面提到的概念。在try catch-构造的catch部分,您可以调用基类方法,但我不会这样做。Try-catch构造用于处理异常,这意味着这是正常工作流的异常。考虑组织您的工作流,而不使用异常作为一个“正常”的替代品!