どのような理由でC#の「使用」セクションをきれいに保つ必要がありますか?


11

コードをリファクタリングするときに、IDEをC#クラスのusingセクションに移動し、未使用の名前空間重複する名前空間を削除して、すべてを並べ替えました。

ペア(ペアプログラミング)が理由を尋ねました。なぜそうしたのか分かりませんでした。私はすべてのコードをきれいに整頓することを習慣からやった。つまり、よりクリーンなコードを作成することは一般的には良いアイデアであると言いましたが、もちろんその理由は正当な理由ではありませんでした。C#コードページのusingセクションで時間を費やすことすらしません。

クラスまたは列挙(または一般に型)をあるネームスペースから別のネームスペースに移動することが多いため、コードに新しいusingステートメントを追加します(コードウィンドウを上に移動して自分でusingステートメントを記述するか、またはAlt+ Ctrl+のF10組み合わせを使用してエディタを介して)、これらの新しいusingステートメントusingセクションの最後に追加され、アルファベット順にソートされず、コンパイラはこれらの問題のいずれにも不満を感じないため、なぜこれを行う必要があるのかセクションはきれいで整頓されていますか?どのような理由がありますか?


5
これは、Stack Overflowで既に質問および回答されています-stackoverflow.com/questions/4163320/unused-using-statements(およびサイドバーの2つのリンクされた質問)-基本的に、未使用の使用を心配する理由はありません
ChrisF

素晴らしいリファレンス@ChrisF、私はそこで答えを得たと思います。たぶん、あなたはその質問に参加するか、同様のことをする必要があります。:)
サイードネアマティ

また、このチェックアウト:stackoverflow.com/a/136646/333306を

回答:


22

usingディレクティブの数に関係なく、パフォーマンスの違いはありません。

しかし、次の2つの理由から、それらをクリーンに保つことは理にかなっていると思います。

  1. usings を見ると、ファイルの依存関係を確認できます。これは、ファイル内のタイプが何をするかを理解するのに役立ちます。これを行う場合using、特定の順序でsを設定することで、より速く表示できます。
  2. が多すぎる場合は、懸念の分離が不十分であり、ファイル内のタイプが多すぎることを示してusingいる可能性があります。

これらはどちらもあまり重要ではないので、心配する必要はありません。しかし、個人的には、それをusingきれいに保つ価値があると思います。


8

usingステートメントの中でクリーンアップする主な理由は次のとおりです。

  • ステートメントを使用するほど、名前の競合が発生する可能性が高くなります。つまり、あいまいさを避けるために、コードに名前空間の一部を含める必要があります。
  • IntelliSenseは、usingステートメント内のすべてのアセンブリに基づいてフィルター処理されます。したがって、不要なステートメントからクリーンアップする場合は、IntelliSenseの正確性を支援することにより、自分自身を支援します。

それに加えて、読みやすさを向上させ、クラスのタイプが何をするのかを簡単に理解できるようにするという点で、他の答えに同意します。


なぜこれが高く投票されないのか分かりません。名前空間の競合は正当な問題です。
ラバーダック

7

「完璧は、追加するものが残っていないときではなく、奪うものが残っていないときに達成されます」–アントワーヌドサンテグジュペリ

必要ではなく、理解を深めないものを削除できる場合は、いつでも削除してください(読みやすさは余分なコードの価値があります)。


偉大な格言。私はそのアイデアが好きでした。+1;)
サイードネアマティ

4

信号からノイズを除去するだけです。ノイズが少ないということは、信号の受信、つまりコードの意図の理解が容易になることを意味します。

ただし、ノイズの発生源としてはかなりマイナーなものです。


2
  • コードの可読性が向上します。
  • 通常、usingステートメントがわずかしかない場合、このガイドラインに従うことはほとんど意味がありません。

  • usingステートメントをセクションに分割する方が理にかなっています。

例えば:

    using System.Web;

    using MyPlatform.FooX;        
    using MyPlatform.FooY;

    using MyFramework.Helpers;        
    using MyFramework.Extentions;

クラスを見ると、特定のクラスがSystem.Webアセンブリとプラットフォームおよびフレームワークを使用していることがすぐにわかります。これにより、依存関係と複雑さの大まかなアイデアが得られます。

その後、これをさらに一歩進めてステートメントを並べることができますが、ステートメントの使用が読みにくくなると思うので、これはお勧めしません。

using MyFramework.Extentions;
using MyFramework.Helpers;

using System.Web;

using MyPlatform.FooX;        
using MyPlatform.FooY;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.