Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#用户定义的异常_C#_.net - Fatal编程技术网

C#用户定义的异常

C#用户定义的异常,c#,.net,C#,.net,如果类正在定义扩展C#中System.exception类的用户定义异常,则有必要在“公共”可见性模式下声明类吗?它完全取决于您希望如何使用用户定义的异常类 访问修饰符的概念与用户定义的异常的概念完全无关 用户定义的异常只是一个扩展System.exception的用户定义类,而访问修饰符是一个指定该类相对于客户端代码的可见性的构造 这意味着,如果只想在定义程序集中使用自定义异常类,只需将其定义为内部类即可。 当然,这并不是很有用,因为您通常在类库中定义自定义异常类,并且希望它们在引用类库的任何

如果类正在定义扩展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
处理程序。

您可以向我们展示您的代码吗?是的,它需要公开。这是一种习惯,但绝非必要。