C# 为什么.NET设计人员没有在系统名称空间中保留所有异常?

C# 为什么.NET设计人员没有在系统名称空间中保留所有异常?,c#,namespaces,C#,Namespaces,今天我在C#工作,试图捕获一个FileNotFoundException。但直到我使用System.IO添加了,我才能够这样做 为什么FileNotFoundException包含在System.IO命名空间中而不包含在System命名空间中 我知道FileNotFoundException将仅由IO引起,因此可能是原因。但另一方面,所有的异常不应该都在系统名称空间中吗 我知道FileNotFoundException仅由IO引起, 这也许就是原因。但另一方面,我们不应该 例外情况下应保留例外情

今天我在C#工作,试图捕获一个
FileNotFoundException
。但直到我使用System.IO添加了
,我才能够这样做

为什么
FileNotFoundException
包含在
System.IO
命名空间中而不包含在
System
命名空间中

我知道
FileNotFoundException
将仅由IO引起,因此可能是原因。但另一方面,所有的
异常
不应该都在
系统
名称空间中吗

我知道
FileNotFoundException
仅由IO引起, 这也许就是原因。但另一方面,我们不应该 例外情况下应保留例外情况

下面是继承权,显示了
FileNotFoundException
的位置。因此,要回答您的问题,它是
异常类的一个孩子(更确切地说是孙子孙女)

System.Object 
  System.Exception
    System.SystemException
      System.IO.IOException
        System.IO.FileNotFoundException
我知道
FileNotFoundException
仅由IO引起, 这也许就是原因。但另一方面,我们不应该 例外情况下应保留例外情况

下面是继承权,显示了
FileNotFoundException
的位置。因此,要回答您的问题,它是
异常类的一个孩子(更确切地说是孙子孙女)

System.Object 
  System.Exception
    System.SystemException
      System.IO.IOException
        System.IO.FileNotFoundException

属于一起的代码应该放在一起。这是其中一个,OOP属于它

System.IO
中的代码是可能引发
FileNotFoundException
的代码,而不是任何其他代码

SqlException
位于
System.Data.SqlClient
命名空间中的方式相同


将所有类型的异常放在一起是没有意义的,特别是对于特定于特定用途(如数据库访问)的异常类型。

属于一起的代码应该放在一起。这是其中一个,OOP属于它

System.IO
中的代码是可能引发
FileNotFoundException
的代码,而不是任何其他代码

SqlException
位于
System.Data.SqlClient
命名空间中的方式相同


将所有类型的异常放在一起是没有意义的,特别是对于特定于特定用途(如数据库访问)的异常类型。

这样想:您可以在自己的
CustomNamespace
中创建自己的
CustomClass
。您的
CustomException
CustomNamespace
中定义是否有意义,因为这是理解其上下文的地方

另外,想象一下,如果每个异常类型都定义在一个地方。一团糟


我们习惯于给我们上下文,并逻辑组织我们的类型。

这样想:您可以在自己的
自定义名称空间
中创建自己的
自定义类
。您的
CustomException
CustomNamespace
中定义是否有意义,因为这是理解其上下文的地方

另外,想象一下,如果每个异常类型都定义在一个地方。一团糟

我们用来给我们上下文逻辑组织我们的类型。

是一个派生自(或者更准确地说,派生自一系列最终派生自你无法真正“放在”下的类)的类除非你说的是让它成为一个内部类。但这需要将它放在与相同的程序集中,而这根本不可伸缩。当处理
System.SomeNewFeature.dll
的团队想要创建一个异常时,他们不能将它放入
mscorlib.dll
中,因为它必须放入他们的代码中

除了这样做的必要性之外,他们还可以把它放在任何他们想要的名称空间中。但从分组/组织的角度来看,这是有意义的。你只有(快速)访问与您正在进行的工作相关的类。如果它们都在
系统中,那么这将是非常复杂的。

是一个派生自(或者更准确地说,派生自最终派生自的一系列类)的类,您不能真正将其放在“下”除非你说的是让它成为一个内部类。但这需要将它放在与相同的程序集中,而这根本不可伸缩。当处理
System.SomeNewFeature.dll
的团队想要创建一个异常时,他们不能将它放入
mscorlib.dll
中,因为它必须放入他们的代码中


除了这样做的必要性之外,他们还可以把它放在任何他们想要的名称空间中。但从分组/组织的角度来看,这是有意义的。你只有(快速)访问与您正在处理的内容相关的。如果它们都在
系统中,那么这将非常复杂。

通常您希望将异常保留在它们处理的范围内(将代码分组)。如果您仔细想想,将
FileNotFoundException
放入
System.IO
中,因为它处理文件系统交互。即使异常不在
System.exception
命名空间中,它仍然继承形式System.exception。其他代码也不太可能抛出
FileNotFoundExcep操作
。就像与文件系统交互的东西不太可能抛出
system.Net.WebException

一般情况下,您希望将异常保持在它们处理的范围内(将代码分组)。如果您仔细想想,将
FileNotFoundException
放在
System.IO
中,因为它处理文件系统交互。即使异常不在
System.exception
命名空间中,它仍然继承表单System.exception。其他一些代码不太可能抛出