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;

以下两个语句是等价的:

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 之类的人来确认或否认这一点:-),但它是为了涵盖您有两个或多个名称空间具有相同名称类型的情况。这将允许:

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 回答