1

私は次のコードを見つけましたが、なぜこのように行われるのかわかりません。紛争のリスク?

using DiffTreeNode = EPiServer.Enterprise.Diff.TreeNode;

そして、クラスでは通常どおりに使用されます。

なぜあなたはこのようなことをするのですか?

4

1 に答える 1

3

これはステートメントではなくusing ディレクティブここusingを参照)であり、のようなものに非常に似ていusing System.Text;ます。


using ステートメントを使用すると、try/catch/finallyブロックをいじることなく、自動的にクリーンアップできます。

using (Sometype xyzzy = new SomeType()) {
    // Do whatever with xyzzy
}
// xyzzy is gone, pining for the fjords.

using ディレクティブは名前空間をインポートするため、名前空間を明示的に使用してその中のすべてのタイプにプレフィックスを付ける必要はありません。特定のバリアントは基本的に名前空間のエイリアスを作成するため、そのポイントを超えているEPiServer.Enterprise.Diff.TreeNodeと単純に参照できます。DiffTreeNode言い換えれば、ディレクティブの後:

using DiffTreeNode = EPiServer.Enterprise.Diff.TreeNode;

次の2つのステートメントは同等です。

EPiServer.Enterprise.Diff.TreeNode.SomeType xyzzy =
    new EPiServer.Enterprise.Diff.TreeNode.SomeType();
DiffTreeNode.SomeType xyzzy = new DiffTreeNode.SomeType();

どちらを入力したいかがわかります。


ここで、ディレクティブで名前空間内の型を単独で使用できるのであれば、なぜそれを行わないのかと疑問に思われるかもしれません。

using EPiServer.Enterprise.Diff.TreeNode;
SomeType xyzzy = new SomeType();

私の賭けは、Jon Skeetのような人たちがこれを確認または否定するのを待つが、同じ名前のタイプを持つ2つ以上の名前空間がある場合をカバーすることだろう:-)。それは可能になります:

using Bt = Trees.BinaryTree;       // Has Tree type.
using Rbt = Trees.RedBlackTree;    // Annoyingly, also has Tree type.
Tree t = new Tree();               // Is this binary or redbalck?
Bt.Tree t1 = new Bt.Tree();        // Definite type.
Rbt.Tree t2 = new Rbt.Tree();      // Ditto.
于 2012-12-12T07:38:25.377 に答える