In C#, qual è la differenza tra A::B
e A.B
? L'unica differenza che ho notato è che solo ::
può essere utilizzato con global
, ma a parte questo, qual è la differenza? Perché entrambi esistono?Operatore risoluzione-spazio :: operatore di accesso membro. in C#
risposta
con :: si possono fare cose come ...
extern alias X;
extern alias Y;
class Test
{
X::N.A a;
X::N.B b1;
Y::N.B b2;
Y::N.C c;
}
e ci sono momenti in cui. è ambiguo quindi :: è necessario. ecco l'esempio del linguaggio C# spec
namespace N
{
public class A {}
public class B {}
}
namespace N
{
using A = System.IO;
class X
{
A.Stream s1; // Error, A is ambiguous
A::Stream s2; // Ok
}
}
l'operatore :: funziona solo con gli alias globale è un sistema speciale di alias.
così ... questo funziona:
using Foo = System.ComponentModel;
public MyClass {
private Foo::SomeClassFromSystemComponentModel X;
}
ma non questa:
public MyClass {
private System.ComponentModel::SomeClassFromSystemComponentModel X;
}
Ciò consente di fuggire dall'inferno della sub namespace che può accadere quando si integra con una libreria dove hanno:
namespace MyAwesomeProduct.System
{
}
E tu in te codice avere
using MyAwesomeProduct;
global :: consente di trovare il sistema reale.
Hm ... stai spiegando perché 'global ::' è utile, ma non esattamente la differenza tra '::' e '.' ... – Mehrdad
:: * only * funziona con alases - in questo modo se qualcuno dichiara uno spazio dei nomi o uno spazio dei sottotitoli in seguito che abbia lo stesso spazio dei nomi dell'alias il tuo codice andrà bene. Se vuoi, è l'uscita dell'operatore jail per la risoluzione dello spazio dei nomi secondario. Hai il controllo di alaise nel tuo file - ma altre persone controllano gli spazi dei nomi delle librerie che usi. :: ti dà il controllo quando altri namespace riescono a cambiare il significato del tuo codice. – Neil
+1 Cool, grazie. – Mehrdad
Quindi stai dicendo che '::' funziona solo con gli spazi dei nomi, mentre '.' funziona con tutto tranne' global'? – Mehrdad
sì, il fatto che :: è solo per namespace significa che puoi usarlo per risolvere ambiguità che non può essere risolto da. –