3

我刚刚将 VS 2005 项目升级到 VS 2008 并正在检查更改。我注意到其中一个 .Designer.cs 文件发生了显着变化。大多数更改只是将System替换为global::System。例如,

protected override System.Data.DataTable CreateInstance()

变成了

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

这里发生了什么?

4

2 回答 2

13

:: 运算符称为命名空间别名限定符。

 global::System.Data.DataTable 

是相同的:

 System.Data.DataTable

Visual Studio 2008 将它添加到设计器生成的代码中,以避免在人们创建名为 System 的类时偶尔发生的模棱两可的引用问题......例如:

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

于 2008-10-02T14:23:19.357 回答
1

为了防止人们在这个列表中做#1。:)

于 2008-10-29T00:59:47.753 回答