-2

我有一个 C++ 程序

int x=100; //Global declaration
main()
{
    int x=200;
    {
        int y;
        y=x;
        cout<<"Inner Block"<<endl;
        cout<<x<<endl;
        cout<<y<<endl
        cout<<::x<<endl;
    }
    cout<<"Outer Block"<<"\n";
    cout<<x<<"\n";
    cout<<::x;
}

该程序的输出是:内部块 200 200 100 外部块 200 100

我想在 c# 中尝试类似的事情,但是当我输入 ::x 时,我给了我错误...请帮助

我试过的是

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CAScopeResolution_Operator
{
    class Program
    {
        static int x = 100;
        static void Main(string[] args)
        {
            int x = 200;
            {
                int y;
                y = x;
                Console.WriteLine("Inner Block");
                Console.WriteLine(x);
                Console.WriteLine(y);
                Console.WriteLine(Program.x);  
            }
            Console.WriteLine("Outer Block");
            Console.WriteLine(x);
            Console.WriteLine(Program.x);
            Console.ReadLine(); 
        }
    }
}

我已经声明了静态 x,但我认为这不是在 c# 中有类似代码的解决方案...请帮助

4

1 回答 1

3

由于C#不像处理全局变量那样C++::具有不同的含义。这里是关于命名空间的,因为您可以通过它所属的类来识别每个成员。
因此,如果您有名称空间和/或类型共享一个标识符但在不同的名称空间中,您可以使用::-operator 来识别它们。

using colAlias = System.Collections;
namespace System
{
class TestClass
{
    static void Main()
    {
        // Searching the alias:
        colAlias::Hashtable test = new colAlias::Hashtable();

        // Add items to the table.
        test.Add("A", "1");
        test.Add("B", "2");
        test.Add("C", "3");

        foreach (string name in test.Keys)
        {
            // Searching the global namespace:
            global::System.Console.WriteLine(name + " " + test[name]);
        }
    }
}
}

生成这个

A 1
B 2
C 3

有关 MSDN 参考,请参见此处

于 2013-03-31T07:50:47.523 回答