10

私が何度も行ったり来たりして気づいたことの 1 つは、using ステートメントを C# コード ファイルのどこに配置する必要があるかということです。using ステートメントの場所がそのファイル内の参照の範囲に影響することは理解していますが、理解できないのは、ほとんどの場合、名前空間内で using ステートメントが必要になる理由です。

ほとんどの場合、1 つのファイルに 1 つの名前空間宣言しか存在しないため、using ステートメントのスコープは役に立たないように見えます。複数のタイプと複数の名前空間を同じファイルに配置し、スコープを使用してステートメントを使用することは完全に理にかなっていますが、1 つの名前空間を持つファイルであっても、これが行われるケースはまだたくさんあります。なんで?

using System;

namespace MyNamespace
{
    using System.Text;

    public class MyClass {
        // ...
    }
}

これがプロジェクト全体で不必要に行われている例としては、ASP.NET MVC ソースがあります。

4

3 に答える 3

13

ファイルの先頭に "using" を配置するのが、Visual Studio の既定の方法です。ただし、推奨されるアプローチは、"using" ステートメントを名前空間内に配置することです。MS の stylecop でさえこれをキャッチし、VS のデフォルトの方法が間違っていると言っています。

どちらの手法もうまく機能します。

StyleCop ルールは次のように述べて います。単一のファイル内に複数の名前空間要素を配置することは、一般的には悪い考えですが、これが行われる場合、すべての using ディレクティブを、全体的に先頭に配置するのではなく、各名前空間要素内に配置することをお勧めします。ファイル。これにより、名前空間のスコープが厳密になり、上記の種類の動作を回避するのにも役立ちます。

名前空間の外に配置された using ディレクティブを使用してコードが記述されている場合、これらのディレクティブを名前空間内に移動するときは、コードのセマンティクスが変更されないように注意する必要があります。上で説明したように、名前空間要素内に using-alias ディレクティブを配置すると、コンパイラは、ディレクティブが名前空間の外に配置された場合には発生しない方法で、競合する型から選択できます。

さらに確認するためのリンクを次に示します。

于 2009-08-27T18:19:49.800 に答える
3

StyleCop を使い始めるまで、この慣行を見たり聞いたりしたことがなく、ルール SA1200によってフラグが立てられましたが、今は無効にしています。Visual Studio が新しいプロジェクトの一部として作成する .cs ファイルが、この規則に違反して、ファイルの先頭 (名前空間の外側) に using ディレクティブを配置するのは奇妙です。

于 2009-08-27T18:33:39.990 に答える
0

恥ずかしそうに頭を垂れながら編集した

ああ!あなたが参照しているusingステートメントは、IDisposableオブジェクトをラップするためではなく、名前空間をインポートするために使用されます!

非常に異なる、あいまいな用語...あなたは私を混乱させました:-)

個人的には、ファイルの先頭にある名前空間の外側が好きです。おそらく、C# と VB.NET を切り替えたことが原因です。

私は、プロジェクトをクラスごとに 1 ファイル、内部 (ネストされた) クラスなし、名前空間ごと (ファイルごと) に 1 つのクラスのみに編成するのが好きです。この状況では、usingステートメントの場所は名前空間の内外に関係ありません。


iDesign C# コーディング標準は、従うべき (または独自のコードを派生させる) 堅実な標準です。項目 14 として、名前空間の外にステートメントを保持することをお勧めしusingます。しかし、それはすべてあなたの会社/プロジェクトの慣習次第です

于 2009-08-27T18:16:45.810 に答える