2012-12-12 113 views
0

我剛剛發現了下面的代碼,不知道爲什麼這樣做。衝突風險?指定使用指令

using DiffTreeNode = EPiServer.Enterprise.Diff.TreeNode; 

然後在課堂上它照常使用。

你爲什麼要這樣做?

+0

看到這個http://stackoverflow.com/questions/75401/uses-of-using-in-c-sharp – yogi

回答

2

這是一個using指令(見here),而不是一個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. 
+0

是的,我個人使用它,如果你在兩個命名空間有樹。 – Carra