120

私はライブラリ プロジェクトを編成しており、名前の付いた中央マネージャー クラスとScenegraph、Scenegraph 名前空間に存在する他のクラスが多数あります。

私が本当に望んでいるのは、シーングラフが でMyLib.Scenegraphあり、他のクラスがMyLib.Scenegraph.*であることですが、それを行う唯一の方法は、他のすべてのクラスをScenegraphScenegraph.cs ファイル内の内部クラスにすることであり、それはあまりにも扱いにくいようです。 .

代わりに、Mylib.Scenegraph.Scenegraphandとして整理しましたMyLib.Scenegraph.*が、これは機能しますが、クラスまたは名前空間のどちらを参照しているかについて、いくつかの条件下で Visual Studio が混乱することがわかりました。

このパッケージを整理して、すべてのコードをまとめて保守不可能な混乱を招くことなく、ユーザーにとって便利なようにする良い方法はありますか?

4

9 に答える 9

129

クラスに名前空間のような名前を付けることはお勧めしません。この記事を参照してください。

フレームワーク設計ガイドラインのセクション 3.4 には、「名前空間とその名前空間の型に同じ名前を使用しないでください」と記載されています。あれは:

namespace MyContainers.List 
{ 
    public class List { … } 
}

この悪さはなぜ?ああ、道を数えさせてください。

あることを指していると思っていても、実際には別のことを指しているという状況に陥ることがあります。この不幸な状況に陥ったとします。Blah.DLL を作成し、Foo.DLL と Bar.DLL をインポートしていますが、残念ながら、どちらも Foo という型を持っています。

// Foo.DLL: 
namespace Foo { public class Foo { } }

// Bar.DLL: 
namespace Bar { public class Foo { } }

// Blah.DLL: 
namespace Blah  
{   
using Foo;   
using Bar;   
class C { Foo foo; } 
}

コンパイラはエラーを出します。「Foo」は、Foo.Foo と Bar.Foo の間であいまいです。残念。名前を完全に修飾することでそれを修正すると思います:

   class C { Foo.Foo foo; } 

これにより、「<strong>Foo.Foo の Foo は Foo.Foo と Bar.Foo の間であいまいです」というあいまいなエラーが発生します。最初の Foo が何を指しているのかはまだわかりません。それがわかるまで、2 番目の Foo が何を指しているのかを理解しようとさえしません。

于 2013-09-11T01:50:37.147 に答える
11

microsoft.public.dotnet.languages.csharpを使用するようになったアドバイスに従うことをお勧めします。MyLib.ScenegraphUtil.ScenegraphMyLib.ScenegraphUtil.*

于 2014-07-03T09:34:10.653 に答える