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
- 1. Funzione membro membro classe operatore moderata
- 2. operatore [] [] C++
- 3. C++ operatore predefinito di assegnazione
- 4. ? (nullable) operatore in C#
- 5. Operatore esponenziale in C++
- 6. Operatore ternario in C
- 7. C# ?? operatore in Ruby?
- 8. operatore sizeof() in C
- 9. C++: Operatore di overloading =
- 10. Operatore di coalizzamento in C#?
- 11. tipo di operatore in C
- 12. C++ - di sovraccarico [] operatore
- 13. Operatore di sovraccarico C++ [] []
- 14. Operatore di overloading -> * in C++
- 15. C++ operatore di typeid
- 16. Operatore di tipo C++
- 17. Operatore di incremento C++
- 18. Operatore di programmazione C++
- 19. Operatore di assegnazione del sovraccarico in C++
- 20. Operatore di assegnazione di sovraccarico C++
- 21. operatore Implementazione <in C++
- 22. Esiste un operatore C# IN?
- 23. Modulo operatore in Objective C
- 24. uso del: operatore in C
- 25. NON è operatore in C#
- 26. operatore freccia in Objective-C
- 27. operatore lambda C# learning
- 28. C# scoping operatore
- 29. C# a operatore sovraccarico
- 30. punto asterisco operatore in C++
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. –