.NET 中的异常处理与 Java

Exception handling in .NET vs Java

我正在将我为 Java 编写的库移植到 .NET C#,我正在处理这两个世界之间异常处理的差异。

特别是我有一个 abstract class 用作基础 class 来实现多个服务。在这个 class 我有这些方法:

public void MyConcreteMethod(){

    //...
    try {
        initialize();
    } catch(InitializationException ex){
        // ...
    }

    // ...

}

public abstract void initialize() throws InitializationException;

每一个扩展 class 都必须实现他对 initialize 的方式,我清楚地知道我需要处理一些可能的 InitializationException.

在 C# 中,我这样转换了我的代码:

public void MyConcreteMethod(){

    //...

    Initialize();

    // ...

}

public abstract void Initialize();

但是通过这种方式我没有关于可能的初始化问题的明确信息:在某些 classes 中我可以抛出异常,而在其他情况下我不能。

所以我应该在 MyConcreteMethod 中处理它们吗?我应该捕获哪个异常?通用 Exception?

唯一的区别是 Java 有一些已检查的异常,但 C# 没有。

由于您要移植的代码最初是用 Java 编写的,并假设它具有正确的异常处理(这应该与语言无关),那么只需 捕获异常C# 代码在 Java 代码捕获它们的相同位置。


在没有签名级异常子句的情况下,向 API 的用户传达可能的异常的标准 .NET 做法是简单地记录它们。您可以在程序集文档和 Web 文档(如果适用)中记录它们。