В чем разница между "global:: System" и "System" в .NET?

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

protected override System.Data.DataTable CreateInstance()

стал

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

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

2 ответа

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

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 в этом списке.:)

licensed under cc by-sa 3.0 with attribution.