8

请参阅我下面的示例程序。我有两个名称空间包含相同的struct. 为了避免在使用 in 时发生冲突Main(),我给了命名空间别名。在调用structfromMain()时,我可以通过命名空间别名直接调用,例如test.MyStruct. 我还有另一个使用::运算符的选项,例如test::MyStruct.

为什么::需要运算符,我应该在哪里使用它而不是别名?

using System;
using test=counter;
using duplicatecounter;

namespace counter
{
    struct MyStruct
    {

    }
}

namespace duplicatecounter
{
    struct MyStruct
    {

    }
}

class Program
{
    public static void Main()
    {
        test.MyStruct a = new test.MyStruct();
        test::MyStruct a1 = new test::MyStruct();
    }
}
4

2 回答 2

12

当有人编写代码而不考虑使用的代码时,主要需要它。即命名空间中的重复类预计将一起使用或隐藏命名空间。

MSDN 示例显示了Use the 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::System.Console.WriteLine(number); // ok

    }
}
于 2013-03-04T16:36:04.630 回答
5

::运算符做同样的事情namespace. ,但::运算符用于查找标识符。它始终位于两个标识符之间

例子 :

global::System.Console.WriteLine("Hello World");

这里解释了一个很好的例子:http: //msdn.microsoft.com/en-us/library/c3ay4x3d.aspx

于 2013-03-04T16:34:33.603 回答