范围解析运算符 :: 与成员访问运算符 。在 C# 中

发布于 2024-10-12 09:55:05 字数 138 浏览 3 评论 0原文

在 C# 中,A::BAB 之间有什么区别?我注意到的唯一区别是只有 :: 可以与 global 一起使用,但除此之外,还有什么区别?为什么他们都存在?

In C#, what's the difference between A::B and A.B? The only difference I've noticed is that only :: can be used with global, but other than that, what's the difference? Why do they both exist?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

温柔嚣张 2024-10-19 09:55:05

:: 运算符仅适用于别名 global 是一个特殊系统提供的别名。

所以...这有效:

using Foo = System.ComponentModel;

public MyClass {

  private Foo::SomeClassFromSystemComponentModel X;

}

但不是这样:

public MyClass {

  private System.ComponentModel::SomeClassFromSystemComponentModel X;

}

这可以让您摆脱子命名空间的地狱,当您与库集成时,子命名空间可能会出现:

namespace MyAwesomeProduct.System
{

}

并且您在代码中具有

using MyAwesomeProduct;

global:: 让您找到真正的子 命名空间系统。

此处的 MSDN 信息

the :: operator only works with aliases global is a special system provided alias.

so ... this works:

using Foo = System.ComponentModel;

public MyClass {

  private Foo::SomeClassFromSystemComponentModel X;

}

but not this:

public MyClass {

  private System.ComponentModel::SomeClassFromSystemComponentModel X;

}

This lets you escape from the hell of sub namespaces that can come about when you are integrating with a library where they have:

namespace MyAwesomeProduct.System
{

}

And you in you code have

using MyAwesomeProduct;

global:: lets you find the real System.

MSDN info here

跨年 2024-10-19 09:55:05

使用 :: 你可以做诸如...之类的事情

 extern alias X;
 extern alias Y;
 class Test
 {
   X::N.A a;
   X::N.B b1;
   Y::N.B b2;
   Y::N.C c;
 }

,有时.不明确,因此需要 :: 。以下是 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
   }
}

http://download.microsoft.com/download/0/B/D/0BDA894F-2CCD-4C2C-B5A7-4EB1171962E5/CSharp%20Language%20Specification.htm

with :: you can do things like...

 extern alias X;
 extern alias Y;
 class Test
 {
   X::N.A a;
   X::N.B b1;
   Y::N.B b2;
   Y::N.C c;
 }

and there are times when . is ambiguous so :: is needed. here's the example from the C# language 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
   }
}

http://download.microsoft.com/download/0/B/D/0BDA894F-2CCD-4C2C-B5A7-4EB1171962E5/CSharp%20Language%20Specification.htm

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文