rav*_*ven 3 .net namespaces visual-studio-2008
我刚刚将VS 2005项目升级到VS 2008并正在检查这些变化.我注意到其中一个.Designer.cs文件发生了重大变化.大部分的变化是简单的替代系统与全球::系统.例如,
protected override System.Data.DataTable CreateInstance()
Run Code Online (Sandbox Code Playgroud)
成为
protected override global::System.Data.DataTable CreateInstance()
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
Fly*_*wat 12
::运算符称为命名空间别名限定符.
global::System.Data.DataTable
Run Code Online (Sandbox Code Playgroud)
是相同的:
System.Data.DataTable
Run Code Online (Sandbox Code Playgroud)
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);
}
}
Run Code Online (Sandbox Code Playgroud)
然而:
global::System.Console.Writeline("This works");
Run Code Online (Sandbox Code Playgroud)
进一步阅读:
http://msdn.microsoft.com/en-us/library/c3ay4x3d(VS.80).aspx