В чем разница между "global :: System" и "System" в .NET? - PullRequest
3 голосов
/ 02 октября 2008

Я только что обновил проект VS 2005 до VS 2008 и изучал изменения. Я заметил, что один из файлов .Designer.cs значительно изменился. Большинство изменений были просто заменой System на global :: System . Например,

protected override System.Data.DataTable CreateInstance()

стал

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

Что здесь происходит?

Ответы [ 2 ]

12 голосов
/ 02 октября 2008

Оператор :: называется псевдонимом пространства имен.

 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

1 голос
/ 29 октября 2008

Чтобы запретить людям делать # 1 в этом списке . :)

...