Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 访问由本地名称隐藏的全局类名_C# - Fatal编程技术网

C# 访问由本地名称隐藏的全局类名

C# 访问由本地名称隐藏的全局类名,c#,C#,例如: namespace MyApp.NET { class Class1 { public enum Types : byte = {t1, t2, t3}; public Types m_type = t1; } class Class2 { Class1 [] m_data = new Class1 [100]; public Class1 Class1 (int i) { return m_dat

例如:

namespace MyApp.NET
{
    class Class1
    {
      public enum Types : byte = {t1, t2, t3};
      public Types m_type = t1;
    }

    class Class2
    {
      Class1 [] m_data = new Class1 [100];
      public Class1 Class1 (int i) { return m_data [i]; }
      void Method2 (Class1 c)
      {
         if (c.m_type == Class1.Types.t1) {}
      }
    }

    class MyApp
    {
    }
}
由于方法Class2.Class1,Class1.Types.t1不可见。是否有方法限定Class1.Types.t1,以便在上述上下文中可以访问它?名称空间与另一个类具有相同的部分名称,这使问题变得复杂

myNameSpace.Class1.Types.t1


是,按名称空间:
myNameSpace.Class1.Types.t1
。如果这些类型不在命名空间中,则可以通过强制全局作用域对其进行限定:
global::Class1.types.t1

您可以按如下方式开始限定:

if (c.m_type == myNameSpace.Class1.Types.t1)
if (c.m_type == NET.Class1.Types.t1) {}
或者,如果为
Class1
类添加别名:

namespace MyApp.NET
{
    using C1 = Class1;
    ...
}
您的
if
语句可以变成:

if (c.m_type == C1.Types.t1) {}

这会让你做你想做的事。

global::MyApp.Net.Class1.Types.t1

你是说myNameSpace.Class1.Types.t1?我试过了,但实际的名称空间名是“DLE.Net”,使用“DLE.Net.Class1”产生了一个错误,因为我还有一个全局类“DLE”,所以MSVC 2010将“DLE.Net”误认为是类“DLE”的成员。我可能需要重命名我的命名空间…如果命名空间中有与命名空间同名的类,我现在知道如何重命名:我需要在命名空间名称前面加上“global::”。感谢您的输入,但在我看来,这类事情模糊了代码。@karx11erx:我刚刚注意到,在尝试这一点时,我在测试代码中使用了一个内部名称空间,因此我在编辑后的答案中添加了一个更简单的解决方案。cdhowies答案使我走上了正确的道路,我后来甚至在IDE自动创建的项目的某些代码中也发现了这一点。