9
votes

Qu'est-ce que le global :: représente en C #

Qu'est-ce que le Global :: Tenez-vous en C #? Par exemple, quelle est la différence entre xxx

et xxx

merci


0 commentaires

3 Réponses :


18
votes

C'est l'espace de noms "global" - il oblige le compilateur à rechercher un nom sans prendre en compte d'autres directives. Par exemple, supposons que vous ayez:

public class Bar{}

namespace Foo
{
    public class Bar {}

    public class Test
    {
        static void Main()
        {
            Bar bar1 = null; // Refers to Foo.Bar
            global::Bar bar2 = null; // Refers to the "top level" Bar
        }
    }
}


1 commentaires

C'est vrai, il est généré par Microsoft Entity Framework, lors de la tentative de générer du code à partir d'un fichier .edmx. Merci beaucoup



5
votes

C'est l'alias global d'espace de noms.

Si vous déclarez un type appelé system.int32 dans votre codeBase, vous pouvez distinguer le fichier .NET intégré à l'aide de cet alias. xxx

voir Comment: utiliser l'espace de noms global Alias ​​(Guide de programmation C #) sur MSDN.


7 commentaires

Votre int32 est global :: system.int32 : votre système n'est pas imbriqué. En outre, les espaces de noms n'ont pas de visibilité.


@HVD: Bien sûr, les espaces de noms ont visibilité ; Ils doivent avoir visibilité parce qu'ils peuvent être caché , et un espace de noms caché caché est par définition non visible . Je pense peut-être que vous vouliez dire que les espaces de noms n'ont pas accessibilité , ce qui est un moyen étrange de caractériser l'accessibilité des espaces de noms; Une meilleure façon de penser c'est que Tous les espaces de noms ont une accessibilité publique .


@ERICLIPPERT Je vais admettre que je n'ai jamais entendu parler d'espaces de noms cachés. Après avoir regardé, parlez-vous d'espaces de noms dans un assemblage externe contenant uniquement des classes internes? Si tel est le cas, Visual Studio et le compilateur C # ne sont pas d'accord sur lesquels ils sont visibles: à l'aide de system.data.entity.internal; est souligné comme une erreur, mais acceptée par le compilateur. Je ne sais pas ce que dit la spécification.


@ERIFLIPPERT Peu importe, je conviens que la visibilité n'était pas le mot juste, je pourrais avoir une meilleure formulation, c'est que «les modificateurs d'accessibilité ne sont pas autorisés sur les espaces de noms; les espaces de noms ne permettent pas de différents niveaux d'accessibilité dans la manière dont les classes et les membres de la classe font. "


@HDV: Non, je ne parle pas de cela. Considérez Nomspace n {Classe C {Classe N {Classe C {} Classe D {N.c C}}}} . Dans la Déclaration de champ C L'espace de noms n est masqué par la classe n . Toute espace de noms peut être cachée. Par définition, un espace de noms qui n'est pas caché et est dans la portée est visible . Je vous réfère à la spécification de langue C # 4, section 3.7.1.


@ERICLIPPERT AH, d'accord, aucun argument là-bas. Dans ce cas, encore une fois, ma terminologie était sans précédent. Il est toujours possible de faire référence à global :: n.c , donc dans ce sens, il n'est pas masqué, mais ce sens n'est pas la manière dont la spécification de langue utilise le mot. Merci, je vais essayer de travailler à utiliser des termes tels que ceux de la même manière que la spécification.


@HVD: Je suis peut-être sur-précision, mais c'est un peu mon travail. :-) Je remarque qu'il est quelque peu malheureux que l'équipe CLR utilise "visible" pour signifier "accessible", que je considère comme un choix imprécis de mots. Le sommet d'une montagne que vous ne pouvez pas gravir n'est pas invisible , c'est inaccessible .



2
votes

Il est utilisé pour faire référence à l'espace de noms global. Ceci est utile si vous écrivez le code dans un espace de noms qui existe déjà ailleurs.

Voir ceci pour plus d'informations: http://msdn.microsoft.com/ EN-US / Bibliothèque / C3AY4X3D.ASPX


0 commentaires