2008-10-02 16 views
3

Je viens de mettre à jour un projet VS 2005 à VS 2008 et examinais les changements. J'ai remarqué que l'un des fichiers .Designer.cs avait changé de manière significative. La majorité des changements étaient simplement des remplacements de Système avec global :: System. Par exemple,Quelle est la différence entre "global :: System" et "System" dans .NET?

protected override System.Data.DataTable CreateInstance() 

est devenu

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

Qu'est-ce qui se passe ici?

Répondre

12

L'opérateur :: est appelé un qualificateur d'alias Namespace.

global::System.Data.DataTable 

est le même que:

System.Data.DataTable 

Visual Studio 2008 a ajouté au concepteur du code généré pour éviter les problèmes de référence que, parfois, mal assurés ont eu lieu lorsque les gens des classes nommées système créé ... Par exemple:

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); 
    } 
} 

Cependant:

global::System.Console.Writeline("This works"); 

Pour en savoir plus:

http://msdn.microsoft.com/en-us/library/c3ay4x3d(VS.80).aspx

+0

Merci. Je ne pouvais pas obtenir de bons hits sur google à cause des deux-points, je suppose. Cependant, il n'y a pas de classe système ou d'espace de noms personnalisé dans ce projet, donc je ne sais pas pourquoi il a ressenti le besoin de qualifier complètement ces références système. – raven