2

私はC#ライブラリに取り組んでいます(この質問のために「Foo」と呼びましょう)。標準の .NET ニーズと非常によく似たニーズがいくつかあります。たとえば、いくつかの描画サービスといくつかの変換サービスを提供します。

ライブラリに慣れ親しみ、ライブラリのユーザーが名前を推測できるようにするために、.NET 標準に従い、ライブラリのこれらの部分に Foo.Drawing や Foo.Convert (など) の名前を付けたいと思います。しかし、実際に使用すると、これが痛みを引き起こすことがわかりました。ほとんどの場合、人々は「システムを使用する」ことを持っています。各ファイルの先頭にあり、このライブラリを使用する場合、「using Foo;」が必要です。同じように。しかし、今では 2 つの Drawing モジュールと 2 つの Convert モジュールがあり、楽しさが続きます。

たとえば、パラメーターまたは変数の型に Drawing.Color を使用するだけでなく、System.Drawing.Color を明示的に指定する必要があります。そうしないと、Foo.Drawing に Color 型がないとコンパイラが文句を言います。同様に、標準の Convert.ToInt32 を使用したい場合は、既に System を使用しているにもかかわらず、System.Convert.ToInt32 と言う必要があります。

これがすべてそのままである理由は理解していますが、私はまだ C# コミュニティに参加したばかりなので、どれが最も標準的なソリューションかはわかりません。

  1. このままにして、ユーザーが必要に応じて完全修飾名を使用することを期待しますか?
  2. 競合するモジュールの名前を別の名前に変更しますか (Foo.Drawing の代わりに Foo.Graphics、Foo.Convert の代わりに Foo.Conversion など)?
  3. 標準名 (Foo.FDrawing および Foo.FConvert) にプレフィックスを使用しますか?
  4. 他の何か?

経験豊富な C# の達人からのアドバイスをお待ちしております。

4

2 に答える 2

1

名前空間のエイリアスを使用できます:

using System;
using FConvert = Foo.Convert;

public class Bar
{
     public void Test()
     {
          var a = Convert.ToInt32("1");
          var b = FConvert.ToInt32("1");
     }
}
于 2014-06-02T14:26:15.523 に答える
0

の主な使用法の 1 つは、名前の衝突namespacesを避けることです。

これは、名前空間が異なる名前空間に属している限り、開発者が同じ名前の型を作成できることを意味します。

ライブラリには通常、少なくともルート名前空間があり、場合によっては、関連する型を論理的にグループ化するネストされた名前空間があります。

名前が意味を持ち、型が実際に何であるかを表している限り、好きなように型に名前を付けてください。ライブラリのクライアントは、名前付きの型が他のものではなくAnimalを表すことを期待しAnimalています。名前空間の命名にも同じことが当てはまります。

ただし、からの名前は絶対に避けSystemてください。ライブラリクライアントが(説明したように)あちこちで競合する名前に対処するのは本当に面倒です。

クラス内で競合する名前空間に対処する一般的な方法は、名前空間のエイリアスを使用することです。

 using FooConvert = Foo.Convert;
 using BarConvert = Bar.Convert;
于 2014-06-02T14:28:53.973 に答える