在C#中,我經常在自動生成的代碼中看到global::
。這不是我曾經用過的自己,所以我不知道它的目的是什麼。有人可以解釋這個嗎?什麼是全球::?
什麼是全球::?
回答
全球是指全局命名空間,它可以用來解決問題,讓你可以重新定義類型。例如:
class foo
{
class System
{
}
}
如果你使用一種系統,其中,將在Foo類進行局部範圍,你可以使用:
global::System.Console.WriteLine("foobar");
訪問全局命名空間。
例
using System;
class Foo
{
public void baz()
{
Console.WriteLine("Foo 1");
}
}
namespace Demo
{
class Foo
{
public void baz()
{
Console.WriteLine("Foo 2");
}
}
class Program
{
protected static global::Foo bar = new global::Foo();
static void Main(string[] args)
{
bar.baz(); // would write Foo 1 to console as it refers to global scope
Foo qux = new Foo();
qux.baz(); // would write Foo 2 to the console as it refers to the Demo namespace
}
}
}
如果我有一個帶有全局名稱空間前綴的類的自動生成的類,並且該類名爲Foo,那麼會發生什麼?我有一個我創建的類,也稱爲Foo,它也沒有名稱空間? – 2013-02-22 11:07:04
如果自動生成的類以全局名稱空間爲前綴並且名爲Foo,則global將引用全局名稱空間中的類。在任何名稱空間中只能有一個具有相同名稱的定義。如果您要從另一個名稱空間內創建類的實例,從而爲Foo定義了另一個含義,則它將佔用本地最多的作用域。請參閱編輯 – chrisw 2013-02-22 11:19:20
這表明根命名空間的某個時候,必要的前綴。
它經常加入到生成的代碼,以避免名稱衝突與用戶代碼。
例如,假設您有一個名爲System
的課程,但您希望使用System.String
。您可以使用global::System.String
來區分。
相信::
來自C++使用它的一個命名空間分隔。
在實踐中,我從來沒有使用過,除了在生成代碼。請注意,您也可以通過使用別名來解決一些衝突。例如using String = System.String;
的global
上下文關鍵字,當談到::運算之前,指的是全局命名空間,這是任何C#程序的默認命名空間,否則命名。
的global::
符告訴編譯器開始尋找從根本上命名空間或類起動。您將在系統生成的代碼中看到它,以便代碼始終有效。這樣,如果您的當前命名空間下有一個名稱空間,與代碼嘗試訪問的頂級命名空間相同,則不會有衝突。
例如,假設您有命名空間A和命名空間B以及命名空間B.A,如果我在命名空間B.A中編寫需要引用命名空間A中的類的代碼,而沒有全局::我無法獲取它。如果我引用A.classname,編譯器將在B.A.中查找classname。使用global ::我可以告訴它在global :: A.classname中查找classname,它會在適當的位置找到classname。
如果您從網上資源獲取內容,請提供適當的歸屬信息:[MSDN](http://msdn.microsoft.com/zh-cn/com/en-us/library/cc713620.aspx)和[什麼是C#中的全局關鍵字](http://blog.dmbcllc.com/what-is-the-global-keyword-in-csharp/) – Bart 2013-02-26 10:47:07
k .. @巴特感謝您的評論當我下次回答時,我會記住。但爲什麼這是downvote? – coder 2013-02-26 11:29:30
那不是我的。 – Bart 2013-02-26 11:34:20
- 1. 什麼是:全球(冒號全球)呢?
- 2. 什麼是在全球WP_Query
- 3. 這個全球目標是什麼?
- 4. 什麼是球拍
- 5. 爲什麼全球+共享的速度比全球獨自
- 6. CMMotionManager是一個全球資源?這是什麼意思?
- 7. 什麼的「全球::」在GTK程序
- 8. Struts 2中的全球前沿是什麼?
- 9. 「污染全球命名空間」是什麼意思?
- 10. 什麼是全球化和本地化概念
- 11. 什麼是全球同步大量數據的最佳方式?
- 12. 什麼是全球寶石中最有用的寶石?
- 13. 不是全球變量嗎?
- 14. $範圍是全球行事
- 15. 全球POST總是空
- 16. 是什麼意思前綴「全球::」智能感知是顯示我
- 17. 這行代碼是做什麼的?球員=(球員%2)? 1:2;
- 18. 私人全球與公共全球
- 19. 什麼是全屏模式
- 20. 什麼是「安全變量」?
- 21. 什麼是運輸安全?
- 22. 什麼是IP安全?
- 23. 什麼是春季安全
- 24. 什麼是類型安全?
- 25. BC30456:CultureInfo的是不是全球化
- 26. 的RubyMine - 紅寶石 - 這是什麼[全球]意味着RVM,我應該使用全局或非全局SDK
- 27. 全球平臺架構中個性化過程的確切目的是什麼?
- 28. Backbone.js - 全球/共享/相關模型的最佳方法是什麼?
- 29. 有一個全球性事件公共汽車的警告是什麼?
- 30. 在本地或全球安裝Express.js有什麼好處
http://stackoverflow.com/questions/3552763/why-use-global-keyword-in-net – 2013-02-22 10:51:49
從msdn:http://msdn.microsoft.com/en-us/library/c3ay4x3d.aspx – 2013-02-22 10:52:46