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 引用为全局空间的成员。
有人可以解释一下吗?
谢谢。
这是存在于全局级别的类 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 { }
解释:
myClass1
是 Test
命名空间中类的实例
myClass2
是 global
命名空间(也称为 no 命名空间)中类的实例。
global::
可用于访问由本地定义的对象隐藏的项。 在这种情况下,Test.MyClass
隐藏对global::MyClass
的访问。
global
在两者中的使用方式相同:
global::System.Console.WriteLine(number);
是
System.Console.WriteLine(number);
如
class TestClass : global::TestApp
是
class TestClass : TestApp
单冒号只是常规继承。