2008-10-02 49 views
3

我剛剛將一個VS 2005項目升級到了VS 2008,並正在研究這些變化。我注意到.Designer.cs文件中的一個發生了顯着變化。大部分改變僅僅是系統global ::系統的替換。例如,.NET中的「global :: System」和「System」有什麼區別?

protected override System.Data.DataTable CreateInstance() 

成爲

protected override global::System.Data.DataTable CreateInstance() 

這是怎麼回事?

回答

12

::運算符稱爲名稱空間別名限定符。

global::System.Data.DataTable 

是一樣的:

System.Data.DataTable 

Visual Studio 2008中添加它來設計器生成代碼,以避免當人們創建了一個名爲系統......例如類,偶爾發生ambigious引用問題:

class TestApp 
{ 
    // Define a new class called 'System' to cause problems. 
    public class System { } 

    // Define a constant called 'Console' to cause more problems. 
    const int Console = 7; 
    const int number = 66; 

    static void Main() 
    { 
     // Error Accesses TestApp.Console 
     //Console.WriteLine(number); 
    } 
} 

但是:

global::System.Console.Writeline("This works"); 

對於進一步閱讀:

http://msdn.microsoft.com/en-us/library/c3ay4x3d(VS.80).aspx

+0

謝謝。我想,因爲冒號,我無法在谷歌上獲得任何好的點擊率。但是,這個項目中沒有自定義的System類或名稱空間,所以我不知道爲什麼它需要完全限定這些系統引用。 – raven 2008-10-02 14:47:25

相關問題