Meh*_*dad 7 c# scope-resolution operator-keyword
在C#中,A::B和之间的区别是A.B什么?我注意到的唯一区别是只能::使用global,但除此之外,有什么区别?为什么它们都存在?
::运算符只适用于别名global是一个特殊的系统提供的别名.
所以......这有效:
using Foo = System.ComponentModel;
public MyClass {
private Foo::SomeClassFromSystemComponentModel X;
}
Run Code Online (Sandbox Code Playgroud)
但不是这个:
public MyClass {
private System.ComponentModel::SomeClassFromSystemComponentModel X;
}
Run Code Online (Sandbox Code Playgroud)
这使您可以逃脱当您与他们拥有的库集成时可能出现的子命名空间的地狱:
namespace MyAwesomeProduct.System
{
}
Run Code Online (Sandbox Code Playgroud)
而且你的代码有
using MyAwesomeProduct;
Run Code Online (Sandbox Code Playgroud)
global ::让你找到真正的系统.
用::你可以做像......
extern alias X;
extern alias Y;
class Test
{
X::N.A a;
X::N.B b1;
Y::N.B b2;
Y::N.C c;
}
Run Code Online (Sandbox Code Playgroud)
而且有时候.是不明确的所以::是需要的.这是C#语言规范的例子
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
}
}
Run Code Online (Sandbox Code Playgroud)