14

C# で名前空間または型エイリアスを定義するための確立された命名規則またはコーディング規則はありますか?

ご存じない方のために説明すると、C# 言語には、名前空間と型のファイルに対してローカルにエイリアスを定義できる機能があります。これは、サード パーティのライブラリと名前が競合する場合や、コード内の型名を短縮する場合に役立ちます。以下は、それがどのように見えるかの例です。

using Forms = System.Windows.Forms;

私が Web で見た例のほとんどは、上記の例のエイリアスFormsのように、省略されていない大文字の名前をエイリアスとして使用する傾向があります。名前空間System.CollectionsのcolAliasエイリアスの例を説明する公式の MSDN ページを含むいくつかの場所。さらに複雑にするために、名前空間エイリアスまたは型エイリアスのどちらが定義されているかに応じて、異なるガイドラインを選択することを好む人もいるかもしれません。

エイリアス名を使用したガイドラインに関心がある理由の背景を説明するために、私が何をしているのかを説明します。最近のプロジェクトでは、型エイリアスを使用して複雑な型引数を受け入れるジェネリック基本クラスから継承するいくつかのクラスがあるパターンを単純化し始めました。

したがって、この手法を使用すると、型エイリアスが適用されると、以下の複雑な例がはるかに読みやすくなります。

public class MyClass: MyGenericBaseClass<TripleLindyFancyAlgorithm<List<SomeValueType>>, List<SomeValueType>>
{
    public override List<SomeValueType> DoSomething(TripleLindyFancyAlgorithm<List<SomeValueType>> operation)
    {
        // ...
    }
 }

そして、型エイリアスを使用してよりクリーンなバージョンを作成する必要があります。

using Result = List<SomeValueType>;
using Algorithm = TripleLindyFancyAlgorithm<List<SomeValueType>>; // Note: cannot reference an alias within an alias definition!

public class MyClass: MyGenericBaseClass<Algorithm, Result>
{
    public override Result DoSomething(Algorithm operation)
    {
        // ...
    }
 }

これははるかに単純に見えますが、Resultなどのエイリアスは実際には単なる List のエイリアスであり、 Resultと呼ばれる実際の型がないことを忘れがちです。概念を視覚的に分離するために、型エイリアスと実際の型を区別しやすくするために、プライベート メンバーの前にアンダースコア '_' を使用するのと同様の接頭辞規則に従うことを検討しています。ただし、そうする前に、車輪を再発明していないことを確認したいと思います。おそらく、すでに確立された慣習が他にもあるからです。

4

7 に答える 7

14

名前空間が競合する場合にのみエイリアスを使用します (つまり、必要な場合のみ)。

少なくとも私にとっては、それ以外の使い方は混乱を招き、気を散らすだけです。

于 2009-10-29T20:14:35.437 に答える
9

名前空間エイリアスは、ほとんどのコード ベースの一般的な機能ではありません。私が最後に使用したとき、上級開発者は長年 C# を使用してきたにもかかわらず、慣れていませんでした。

まれであるため、そのための規則は開発されていません。

エイリアスを使用する場合は、チームと話し合って独自の規則を作成してください。

エイリアスが使用されているのを見たいくつかの異なる方法:

  • 名前空間の頭字語。通常、名前空間の大文字。
  • 名前空間の最後 - 複数形が複数化されていない場合。
  • 説明的な短い名前。
于 2011-12-09T19:15:06.590 に答える
6

個人的には、インテリセンスをきれいに保つためにのみ使用します。

using StringBuilder = System.Text.StringBuilder;

型の名前を変更すると、メンテナンス プログラマーにパンドラの箱が開かれます。

于 2009-10-29T20:14:32.623 に答える
4

名前空間エイリアスの最も一般的な 2 つのケースは次のとおりです。

  1. 見て使ってます(トレンドとして)
  2. 別の言語からコードを移植する

最初のケースのため、コメントはありません。2 番目の良い例は、C からコードを移植し、次のような実用性のために名前空間エイリアスを使用することです。

using i64 = System.Int64;
using u8 = System.Byte;
using u32 = System.UInt32;
using u64 = System.UInt64;

上記のエイリアスを怠惰なプログラミングと見なしたとしても、間違いを避けるのに役立ちます。

于 2011-12-11T19:49:41.163 に答える
2

それらを抽象化に使用する規則を採用できます。

using Id = System.Int32;

このようにして、その行を簡単に置き換えることができます

using Id = System.Guid;

ある時点で、他のコードを変更する必要はありません(実際の型への依存関係を作成するために抽象化を覗いていないと仮定します...)

于 2012-05-05T22:15:27.007 に答える
0

私は通常、異なる名前空間で 2 つの類似した名前のクラスを使用する必要があり、コードで型を完全に指定したくない場合にのみ使用します。

using xItem = My.Project.NameSpace.Item;
using yItem = Your.ThirdParty.Framework.Item;
于 2013-04-11T14:30:27.423 に答える