7

A::BC# では、との違いは何A.Bですか? 私が気づいた唯一の違いは、 でのみ::使用できることですglobalが、それ以外の違いは何ですか? なぜ両方が存在するのですか?

4

2 に答える 2

6

:: 演算子はエイリアスでのみ機能します 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情報はこちら

于 2011-01-19T04:13:12.207 に答える
5

:: を使用すると、次のようなことができます...

 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

于 2011-01-19T04:10:12.117 に答える