.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 文档(如果适用)中记录它们。
我正在将我为 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 文档(如果适用)中记录它们。