5

だから私はMSDNのドキュメントを読んでいて、出くわしました:

http://msdn.microsoft.com/en-us/library/sf0df423.aspx

usingディレクティブにエイリアスを使用する実用的な用途は何ですか?

私はそれが何をするのか理解していますが、なぜそれを使いたいのかわかりません。

4

6 に答える 6

10

2 つの異なる名前空間に同じ名前のクラスがある場合に便利です。そうなったとき、あなたには2つの選択肢があります。 using1 つの名前空間で別の名前空間を使用しない (つまり、もう 1 つの名前空間には完全修飾名を使用する) か、using通常は 1 つの名前空間でusing別の名前空間を別名で使用します。エイリアスは完全修飾名よりも短いため、より簡単で便利です。

明らかに最善の選択肢は、特に誰かが同じクラスで両方を使用したい可能性がある場合は、異なる名前空間に同じ名前のパブリック クラスを持たないことです。

于 2012-04-13T20:45:57.277 に答える
5

たとえば、クラス 2 で、同じ名前で名前空間が異なる別のクラスを使用している場合があります。例えば:

 using TextBoxForms = System.Windows.Forms.TextBox
 using TextBoxWeb = System.Web.UI.WebControls.TextBox
于 2012-04-13T20:48:44.387 に答える
5

ジェネリックを書き出すと非常に冗長になる場合があるため、ジェネリックに使用するのが好きです。

using NatMap = System.Collections.Generic.Dictionary<IPAddress, IPAddress[]>;
...
NatMap natMap = new NatMap();

関数を使用する場合:

void PrintNat(NatMap natMap) {
    foreach (IPAddress[] addresses in natMap) {
        foreach (IPaddress address in addresses) {
            // bla bla bla
        }
    }
}
于 2012-04-13T20:58:56.647 に答える
3

たとえば、異なる名前空間の同じ名前を持つ 2 つのクラスの短い名前が必要な場合に使用できます。名前空間を指定すると、クラス名が競合するため、別の名前を付けることができます。

using ImageControl = System.Windows.Controls.Image;
using Image = System.Drawing.Image;
于 2012-04-13T20:48:18.307 に答える
3

それを使用する2つの本当に良い理由があります:

  1. 名前の衝突 (別々の名前空間にある同じ名前の 2 つのクラス) があります。完全修飾型 (完全な名前空間を含む) を書き出す代わりに、それらの 1 つにエイリアスを付けて、はるかに短いが同等にわかりやすい名前にすることができます。

    a. 例: クラスを含むプロジェクトがあり、KeyValuePair<TKey, TValue>System.Collections.Generic を別の用途にも使用しているとします。クラスにエイリアスを付けることができます。コードは、いたるところusing MyStringIntPair = MyProject.Collections.Generic.KeyValuePair<string, int>にないため、はるかにきれいに見えます。MyProject.Collections.Generic

  2. ネイティブ相互運用。私は個人的に、ネイティブlong型を扱うときにこれが非常に役立つことを発見しました。ほとんどのオペレーティング システムでは、alongはポインターと同じサイズですが、Windows 64 ビットでは int と同じです。したがって、ほとんどのオペレーティング システムでは、 をlongとして表すことができIntPtrますが、Windows 64 ビットでは変更する必要があるため、型エイリアスを作成し、プリプロセッサ ディレクティブでその定義を変更します。

    a. FreeType はlongかなりの量を使用するため、そのバインディングを作成したときに、Windows 64 ビットでも動作するようにする必要がありました。OS に基づいた何らかの動的なサブクラス化を検討していましたが、プリプロセッサ ディレクティブと型エイリアスの方が単純で、今のところ作業は完了しています。例として、 longs を使用する FT_BBox 構造体があります

以下の FT_BBox 構造体の簡略化された関連バージョン:

using System;
using System.Runtime.InteropServices;

#if WIN64
using FT_Pos = System.Int32;
#else
using FT_Pos = System.IntPtr;
#endif

namespace SharpFont.Internal
{
    /// <summary>
    /// Internally represents a BBox.
    /// </summary>
    /// <remarks>
    /// Refer to <see cref="BBox"/> for FreeType documentation.
    /// </remarks>
    [StructLayout(LayoutKind.Sequential)]
    internal struct BBoxRec
    {
        internal FT_Pos xMin, yMin;
        internal FT_Pos xMax, yMax;
    }
}
于 2012-04-13T21:33:35.337 に答える
3

そのリンクから

using エイリアスを作成して、識別子を名前空間または型に限定しやすくします。using エイリアス ディレクティブの右側は、その前にある using ディレクティブに関係なく、常に完全修飾型である必要があります。

したがって、タイプを変更する可能性があります

Foo.Bar.Foo.Bar.Foo.Bar.Foo.Bar.Foo.Bar.Foo.Bar

次のようなより扱いやすいものに

FooBar

特に衝突する名前空間が複数ある場合

于 2012-04-13T20:47:17.760 に答える