我刚刚找到以下代码,不知道为什么会这样。冲突风险?
using DiffTreeNode = EPiServer.Enterprise.Diff.TreeNode;
然后在课堂上照常使用。
你为什么要做这样的事情?
我刚刚找到以下代码,不知道为什么会这样。冲突风险?
using DiffTreeNode = EPiServer.Enterprise.Diff.TreeNode;
然后在课堂上照常使用。
你为什么要做这样的事情?
这是一个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.