私は走ってきましたスタイルコップいくつかの C# コードで、using
ディレクティブは名前空間内にある必要があると報告され続けます。
using
ディレクティブを名前空間の外部ではなく内部に配置する技術的な理由はありますか?
ベストアンサー1
実際には、この 2 つには (微妙な) 違いがあります。File1.cs に次のコードがあるとします。
// File1.cs
using System;
namespace Outer.Inner
{
class Foo
{
static void Bar()
{
double d = Math.PI;
}
}
}
ここで、誰かが次のような別のファイル (File2.cs) をプロジェクトに追加したと想像してください。
// File2.cs
namespace Outer
{
class Math
{
}
}
コンパイラは、名前空間外のディレクティブOuter
を調べる前に検索するため、の代わりにを見つけます。残念ながら (あるいは幸運なことに?)にはメンバーがないため、File1 は壊れてしまいます。using
Outer.Math
System.Math
Outer.Math
PI
using
次のように名前空間宣言内に配置すると、状況は変わります。
// File1b.cs
namespace Outer.Inner
{
using System;
class Foo
{
static void Bar()
{
double d = Math.PI;
}
}
}
これで、コンパイラは をSystem
検索する前にを検索しOuter
、 を見つけてSystem.Math
、すべてが正常になります。
Math
にはすでに が存在するため、ユーザー定義クラスにこの名前を使用するのは適切ではないと主張する人もいますSystem
。ここでのポイントは、違いが存在するということと、それがコードの保守性に影響するということです。
が ではなくFoo
名前空間 にある場合に何が起こるかに注目するのも興味深いことです。その場合、がどこにあるかに関係なく、 File2 を追加すると File1 が壊れます。これは、コンパイラがディレクティブを調べる前に、最も内側の囲み名前空間を検索することを意味します。Outer
Outer.Inner
Outer.Math
using
using