【问题标题】:What is the difference between "global::System" and "System" in .NET?.NET 中的“global::System”和“System”有什么区别?
【发布时间】:2008-10-02 14:19:35
【问题描述】:

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

protected override System.Data.DataTable CreateInstance()

成为

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

这是怎么回事?

【问题讨论】:

    标签: .net visual-studio-2008 namespaces


    【解决方案1】:

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

     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

    【讨论】:

    • 谢谢。我想,由于冒号,我无法在谷歌上获得任何好的点击率。但是,这个项目中没有自定义的 System 类或命名空间,所以我不知道为什么它觉得需要完全限定这些 System 引用。
    【解决方案2】:

    为了防止人们做#1 on this list。 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-21
      • 2012-01-22
      • 2010-12-23
      • 2010-11-25
      • 2012-06-05
      • 2010-10-29
      • 2020-08-24
      • 1970-01-01
      相关资源
      最近更新 更多