抛出异常:是否封装它们?

Sim*_*mon 4 .net c# encapsulation

一旦我阅读了一篇鼓励以下编程范例的MSDN文章(它不是100%真实...请参阅编辑):

public class MyClass
{
    public void Method1()
    {
        NewCustomException();
    }

    public void Method2()
    {
        NewCustomException();
    }

    void NewCustomException()
    {
        throw new CustomException("Exception message");
    }
}
Run Code Online (Sandbox Code Playgroud)

你认为这种范式有意义吗?将异常消息存储在static const字段中然后将其传递给异常的构造函数,而不是封装整个异常抛出是不是已经足够了?

编辑:

使用异常构建器方法.一个类在其实现中从不同的地方抛出相同的异常是很常见的.要避免过多的代码,请使用创建异常的辅助方法并将其返回.

我刚刚注意到(请参阅引文),该文章告诉我返回一个异常:

public class MyClass
{
    public void Method1()
    {
        throw NewCustomException();
    }

    public void Method2()
    {
        throw NewCustomException();
    }

    CustomException NewCustomException()
    {
        return new CustomException("Exception message");
    }
}
Run Code Online (Sandbox Code Playgroud)

你怎么看待这件事?

Jam*_*der 10

我的理解是,如果除了丢失与异常相关联的堆栈跟踪之外没有其他原因,传递异常实例是一种失礼.调用另一种方法会改变堆栈跟踪,从而使其无效.我建议至少让异常的堆栈跟踪并将其作为参数传递给一些帮助者,如果这是你要走的路.