C#用户定义的异常
如果类正在定义扩展C#中System.exception类的用户定义异常,则有必要在“公共”可见性模式下声明类吗?它完全取决于您希望如何使用用户定义的异常类 访问修饰符的概念与用户定义的异常的概念完全无关 用户定义的异常只是一个扩展System.exception的用户定义类,而访问修饰符是一个指定该类相对于客户端代码的可见性的构造 这意味着,如果只想在定义程序集中使用自定义异常类,只需将其定义为内部类即可。 当然,这并不是很有用,因为您通常在类库中定义自定义异常类,并且希望它们在引用类库的任何程序集中都可见,以便使用者可以有机会处理自定义异常类(如果在其客户端代码中有意义)。请参阅:C#用户定义的异常,c#,.net,C#,.net,如果类正在定义扩展C#中System.exception类的用户定义异常,则有必要在“公共”可见性模式下声明类吗?它完全取决于您希望如何使用用户定义的异常类 访问修饰符的概念与用户定义的异常的概念完全无关 用户定义的异常只是一个扩展System.exception的用户定义类,而访问修饰符是一个指定该类相对于客户端代码的可见性的构造 这意味着,如果只想在定义程序集中使用自定义异常类,只需将其定义为内部类即可。 当然,这并不是很有用,因为您通常在类库中定义自定义异常类,并且希望它们在引用类库的任何
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
处理程序。您可以向我们展示您的代码吗?是的,它需要公开。这是一种习惯,但绝非必要。