1

今日、私は C# で作業していて、FileNotFoundException. しかし、追加するまではできませんでしたusing System.IO

名前空間ではなく名前空間にFileNotFoundException含まれているのはなぜですか?System.IOSystem

FileNotFoundExceptionこれは IO のみが原因であることを理解しているため、おそらく理由です。しかし一方で、すべてExceptionの s がSystem名前空間にあるべきではないでしょうか?

4

5 に答える 5

6

一緒に属するコードは一緒に保管する必要があります。これは、OOP が属するモジュラー プログラミングの重要な側面の1 つです。

のコードは、他のコードではなく、System.IOをスローする可能性が高いコードです。FileNotFoundException

名前空間SqlExceptionにあるのと同じように。System.Data.SqlClient

すべてのタイプの例外をまとめることは意味がありません。特に、特定の用途 (データベース アクセスなど) に非常に固有の例外タイプの場合は特にそうです。

于 2012-08-02T15:11:14.433 に答える
2

FileNotFoundExceptionこれは IO のみが原因であることを理解しているため、おそらく理由です。しかし一方で、すべての例外を例外の下に置くべきではないでしょうか?

以下は、 がどこにあるかを示す階層FileNotFoundExceptionです。したがって、あなたの質問に答えるために、それはException class

System.Object 
  System.Exception
    System.SystemException
      System.IO.IOException
        System.IO.FileNotFoundException
于 2012-08-02T15:11:12.460 に答える
2

次のように考えてみてください。独自のCustomClassで独自のものを作成しますCustomNamespace。その文脈が理解される場所であるため、その中でCustomException定義されることは理にかなっているでしょうか?CustomNamespace

また、すべての例外タイプが 1 か所で定義されているとします。完全な混乱!

名前空間を使用してコンテキストを提供し、型を論理的に編成します。

于 2012-08-02T15:12:22.907 に答える
2

FileNotFoundExceptionから派生したException(または、より正確には、最終的に から派生した一連のクラスから派生したException) クラスです。おそらく内部クラスにすることについて話しているのでない限り、 FileNotFoundException「下に」置くことはできません。Exceptionしかし、それには と同じアセンブリに配置する必要があり、Exceptionまったくスケーリングされません。取り組んでいるチームが例外を作成したいと思ったとき、彼らはそれをコードにSystem.SomeNewFeature.dll入れることができませんでした。mscorlib.dllException

それを行う必要性を超えて、好きな名前空間に押し込むことができます。しかし、グループ化/組織化の観点からは理にかなっています。Exception作業しているものに関連する にのみ (すばやく) アクセスできます。それらがすべて含まれSystemていたら、非常に複雑になります。

于 2012-08-02T15:12:37.840 に答える
1

通常、例外が処理するスコープ内に例外を保持する必要があります (コードをグループ化したままにします)。考えてみれば、ファイルシステムのやり取りを処理するため、配置することFileNotFoundExceptionは理にかなっています。System.IO例外が名前空間にない場合でも、System.ExceptionSystem.Exception から継承されます。他のコードが をスローする可能性はほとんどありませんFileNotFoundException。ファイルシステムと対話する何かがスローする可能性が低いのと同じようにSystem.Net.WebException

于 2012-08-02T15:13:42.160 に答える