C# 全局命名空间别名(类 TestClass : global::TestApp)

本文关键字:global TestApp TestClass 全局 命名空间 别名 | 更新日期: 2023-09-27 18:32:14

我正在查看此页面 MSDN:全局命名空间别名。

他们在那里有以下一段代码。

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 引用为全局空间的成员。

有人可以解释一下吗?

谢谢。

C# 全局命名空间别名(类 TestClass : global::TestApp)

这是存在于全局级别的类 TestApp 的强命名,类似于系统。如果你要说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.
        }
    }       
}

也许这个例子会更好地说明它:

法典:

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 命名空间(也称为 no 命名空间)中类的实例。

global::可用于访问由本地定义的对象隐藏的项。 在这种情况下,Test.MyClass隐藏对global::MyClass的访问。

global

两者中的使用方式相同:

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

    System.Console.WriteLine(number);

    class TestClass : global::TestApp

    class TestClass : TestApp

单冒号只是常规继承。