如果该类定义了在C#中扩展System.exception类的用户定义异常,是否有必要在“公开”可见性模式下声明一个类?
答案 0 :(得分:2)
这完全取决于您要如何使用用户定义的异常类。
访问修饰符的概念与用户定义的异常的概念完全无关。
用户定义的异常只是扩展System.Exception的用户定义的类,而访问修饰符是一种结构,用于指定该类相对于客户端代码的可见性。
这意味着,如果您只想在定义程序集中使用自定义异常类,则只需将其定义为内部类即可。 当然,这不会很有用,因为您通常在类库中定义自定义异常类,并且希望它们在引用该类库的任何程序集中可见,以便使用者可以在以下情况下处理您的自定义异常类:在他或她的客户代码中很有意义。
答案 1 :(得分:0)
public class Foo
{
private class MyException : Exception
{
public MyException(string message) : base(message) { }
}
public static void Throw()
{
throw new MyException("Hello world.");
}
}
public class Program
{
public static void Main()
{
try
{
Foo.Throw();
}
//catch(Foo.MyException myException)
//{
// This doesn't compile
//}
catch(System.Exception exception)
{
Console.WriteLine
(
"Exception is of type '{0}' with a message of '{1}'",
exception.GetType().Name,
exception.Message
);
//Does not compile:
//var typedException = (Foo.MyException)exception;
}
}
}
输出:
Exception is of type 'MyException' with a message of 'Hello world.'
因此,事实证明您仍然可以捕获异常,检查其类型并读取其基本属性,并且一切正常。但是,如果要以类型安全的方式处理它并将其转换为特定类型,则代码将无法编译。这也意味着您不能使用特定于类型的catch
处理程序。