调用方法如何知道被调用方法抛出哪些异常?
问题描述:
我知道在C#中,我们不需要方法来显式定义它可能抛出的方法签名中的异常。但是,我想知道如何处理调用方法想要处理被调用方法引发的可能异常的场景?调用方法如何知道被调用方法抛出哪些异常?
让我明确我的问题。
假设有一个DLL文件中定义为
public string DoSomething()
{
// This method do something and returns a string
}
现在作为主叫的方法我有什么方法希望它返回一个result.But我怎么知道什么是可能的哪些知识此方法抛出的异常。
在jave中我们有抛出关键字。所以,如果我在java中定义相同的方法,然后我可以做类似下面
public String doSomething() throws SomeException {
// do something
throw new SomeException();
}
这这种方法来调用者知道例外需要的东西就在自己身边来处理。
我们如何在C#中实现这一点,因为C#没有在方法签名中抛出关键字?
一种可能的方法是捕获一个通用的异常对象。但是再次捕捉一个通用异常是处理异常的一种可怕方式。
答
还有就是XML文档中的一个部分,专门用于这一目的:
/// <summary>
/// Does something
/// </summary>
/// <exception cref="System.OutOfMemoryException"></exception>
/// <returns></returns>
public string DoSomething()
{
// This method do something and returns a string
}
这使得API的设计师到什么例外,从这个方法调用预期客户提供信息。就像这样:
你可以通过点击上面的/
三次当光标上面的方法产生这些XML行。
您可以随时使用Xml注释并列出这个mehtod抛出的所有异常。通过这种方式,您可以在因为智能感知而输入时看到 –
即使使用Java,您也不只是使用Pokemon异常处理,并且每天都会这样处理。无论哪种方式,您都需要了解调用方可以理性处理哪些异常,并且这总是需要人为解释。 –
@Damien_The_Unbeliever是的,但在java中,如果被调用方法重新抛出统一或自定义异常(对于此方法处理的所有异常),调用方必须只关心该异常。 但是在C#中,即使调用者知道要处理什么,因为方法签名没有给出任何东西。 除了m.rogalski和user3185569提供的答案之外,还有其他方法可以实现吗?尽管应有的尊重,但作为一名Java开发人员,它并没有说服我在一些XML文件中定义我的方法抛出的所有异常。 – amanraj