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.'
4条答案
按热度按时间xxslljrj1#
这完全取决于您希望如何使用用户定义的异常类。
访问修饰符的概念与用户定义异常的概念完全无关。
用户定义的异常只是扩展System.Exception的用户定义的类,而访问修饰符是指定该类相对于客户端代码的可见性的构造。
这意味着如果你只想在定义程序集中使用你的自定义异常类,你可以简单地把它定义为一个内部类。当然,这不是很有用,因为你通常在类库中定义自定义异常类,并且你希望它们在引用你的类库的任何程序集中都是可见的。以便使用者有机会处理您的自定义异常类(如果它在他或她的客户端代码中有意义的话)。
68bkxrlz2#
Try it on DotNetFiddle并参见:
输出:
所以你仍然可以捕获异常,检查它的类型,读取它的基属性,一切都正常,但是如果你想以类型安全的方式处理它,并将它强制转换为特定的类型,你的代码将无法编译,这也意味着你不能使用类型特定的
catch
处理程序。kyxcudwk3#
kmb7vmvb4#
//由kamalesh和sharad编写的代码