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
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ć. –