W języku C#, jaka jest różnica między A::B
a A.B
? Jedyną różnicą, którą zauważyłem jest to, że tylko ::
może być używany z global
, ale poza tym, jaka jest różnica? Dlaczego oba istnieją?Operator rozróżniania zakresów :: operator versus member-access. w języku C#
Odpowiedz
z :: można robić takie rzeczy jak ...
extern alias X;
extern alias Y;
class Test
{
X::N.A a;
X::N.B b1;
Y::N.B b2;
Y::N.C c;
}
i zdarza się. jest niejednoznaczny: jest potrzebny. oto przykład z języka C# specyfikacji
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
}
}
:: operator pracuje tylko z aliasów globalny jest specjalny system pod warunkiem, alias.
... tak to działa:
using Foo = System.ComponentModel;
public MyClass {
private Foo::SomeClassFromSystemComponentModel X;
}
ale nie w ten sposób:
public MyClass {
private System.ComponentModel::SomeClassFromSystemComponentModel X;
}
To pozwala uciec od piekła nazw podsektorów, które mogą powstać podczas integracji z biblioteką gdzie mają:
namespace MyAwesomeProduct.System
{
}
I w was kodzie mają
using MyAwesomeProduct;
global :: pozwala znaleźć prawdziwy system.
Hm ... wyjaśniasz, dlaczego 'global ::' jest użyteczne, ale nie jest to dokładnie różnica między ':' i '.' ... – Mehrdad
:: * tylko * działa z alazami - tak, jeśli ktoś deklaruje przestrzeń nazw lub przestrzeń nazw później, która ma taką samą przestrzeń nazw jak alias, twój kod będzie w porządku. Jest to wydostanie się z operatora więzienia w celu uzyskania rozdzielczości podprzestrzennej, jeśli zechcesz. Masz kontrolę nad aliasami w swoim pliku - ale inne osoby kontrolują przestrzenie nazw używanych bibliotek. :: daje kontrolę, gdy inne przestrzenie nazw wpływają na zmianę znaczenia twojego kodu. – Neil
+1 Fajnie, dzięki. – Mehrdad
- 1. ++ operator w języku Python
- 2. Co robi operator/= w języku C#?
- 3. C++ operator ":"
- 4. C# co robi operator ==?
- 5. C# ?? operator w Ruby?
- 6. Arytmetyka C++, jeśli operator
- 7. Obscure C++ operator przeciążenia
- 8. C# Czym jest "?" Operator
- 9. C++ Operator warunkowy
- 10. C++ [b] operator
- 11. Objective-C the^operator
- 12. Operator C++ typeof
- 13. Operator [] C++ Get/Set
- 14. C++ operator == przeciążenia
- 15. C++ domyślny operator przypisania
- 16. Dlaczego operator modulus nie działa podwójnie w języku C#?
- 17. Czy operator odwołań warunkowych byłby dobry w języku C#?
- 18. Dlaczego operator przypisania zwraca przypisaną wartość w języku C#?
- 19. IN i = operator w języku zapytań JPA
- 20. C# „jest” alternatywny operator w Javie
- 21. Operator potęgowania w Swift
- 22. Pustka(), operator przecinek (operator) i niemożliwe przeciążenia
- 23. Co oznacza operator C# =>?
- 24. Operator + = z pustych typu C#
- 25. Jak przeciążyć operator indeksu? (C++)
- 26. Operator Przeciążenie w struktury
- 27. C# Operator warunkowy Nie oświadczenie?
- 28. operator() przeciążenie z szablonu C++
- 29. C# ?? operator koalesulacji zerowej LINQ
- 30. C++, operator trójskładnikowych, std :: cout
Więc mówisz, że '' :: działa tylko z przestrzeniami nazw, podczas gdy '.' współpracuje ze wszystkiego z wyjątkiem' global'? – Mehrdad
tak, fakt, że :: jest tylko dla przestrzeni nazw, oznacza, że możesz go użyć, aby rozwiązać niejednoznaczność, której nie można rozwiązać. –