0

このページMSDN: Global namespace aliasを見ていました。

そこには次のコードがあります。

class TestApp
{
    // Define a new class called 'System' to cause problems. 
    public class System { }

    // Define a constant called 'Console' to cause more problems. 
    const int Console = 7;
    const int number = 66;

    static void Main()
    {
        // The following line causes an error. It accesses TestApp.Console, 
        // which is a constant. 
        //Console.WriteLine(number);
    }
}

彼らはさらに例を挙げています。

ここでの使用方法を理解しglobalています:

// OK
global::System.Console.WriteLine(number);

ただし、次の機能がわかりません(特にglobal::TestApp:が同じ行でどのように使用されているか)。

class TestClass : global::TestApp

MSDN ページには、上記のコードについて次のように記載されています。「次の宣言は、グローバル スペースのメンバーとして TestApp を参照しています。」.

誰かがこれを説明してもらえますか?

ありがとう。

4

3 に答える 3

3

これは、System. グローバル システム コンソールを継承することになるとしたらclass TestClass : global::System.Console(それが合法である場合)。したがって、この例では、グローバル スコープで定義されている TestApp を継承しています。

したがって、さらに明確にするために、これを次の名前空間モデルと考えてください。

namespace global
{
    // all things are within this namespace, and therefor
    // it is typically deduced by the compiler. only during
    // name collisions does it require being explicity
    // strong named

    public class TestApp
    {
    }

    namespace Program1
    {
        public class TestClass : global::TestApp
        {
            // notice how this relates to the outermost namespace 'global'
            // as if it were a traditional namespace.
            // the reason this seems strange is because we traditionally
            // develop at a more inner level namespace, such as Program1.

        }
    }       
}
于 2013-09-20T19:01:06.987 に答える
1

global両方で同じように使用されます。

    global::System.Console.WriteLine(number);

することです

    System.Console.WriteLine(number);

なので

    class TestClass : global::TestApp

することです

    class TestClass : TestApp

単一のコロンは単なる通常の継承です。

于 2013-09-20T19:10:36.643 に答える
1

たぶん、この例はそれをよりよく説明しています:

コード:

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            var myClass1 = new MyClass();
            var myClass2 = new global::MyClass();
        }

        public class MyClass { }
    }
}

public class MyClass { }

説明:

myClass1Test名前空間内のクラスのインスタンスです

myClass2global名前空間、別名名前空間ではないクラスのインスタンスです。

global::ローカルに定義されたオブジェクトによって隠されているアイテムにアクセスするために使用できます。この場合、へのTest.MyClassアクセスを隠しますglobal::MyClass

于 2013-09-20T19:14:56.083 に答える