【问题标题】:using namespace in C# from CLI/C++ class在 CLI/C++ 类中使用 C# 中的命名空间
【发布时间】:2012-03-24 04:46:17
【问题描述】:

这可能是一个 C# 菜鸟问题...

假设我有以下 CLI/C++ 标头:

namespace DotNet {
  namespace V1 {
    namespace X {


      public ref class AClass {
      public:

        AClass() {}
        void foo() {}

        static void bar() {}
      };
    }
  }

}

然后从 C# 我执行以下操作:

using DotNet;
V1.X.AClass a = new V1.X.AClass();

我明白了:

Program.cs(18,7):错误 CS0246:类型或命名空间名称“V1”可能 找不到(您是否缺少 using 指令或程序集 参考?)

同理:

 using DotNet.V1;
 X.AClass a = new X.AClass();

Program.cs(18,7):错误 CS0246:类型或命名空间名称“X”可能 找不到(您是否缺少 using 指令或程序集 参考?)

有效的是:

 DotNet.V1.X.AClass a = new DotNet.V1.X.AClass();

或者

 using DotNet.V1.X;
 AClass a = new AClass();

所以要么我必须使用完整的命名空间路径,要么我必须打开所有路径才能访问该类。对此我能做些什么吗? 我希望能够只打开它的一部分。

【问题讨论】:

    标签: c# c++-cli


    【解决方案1】:

    所以要么我必须使用完整的命名空间路径,要么我必须打开所有路径才能访问该类。

    是的。

    对此我有什么办法吗?

    我不知道。为什么你只想要一个用于整个命名空间的 using 指令?这不是最简单的方法吗?

    请注意,这与 C++/CLI 无关。无论源语言是什么,都是如此 - 因此您也可以使用 C# 来查看它:

    namespace DotNet.V1.X
    {
        public class AClass {}
    }
    

    【讨论】:

      【解决方案2】:

      正如 Jon Skeet 所说,您必须在 using 语句中或每次在代码中引用它时包含完整的命名空间。我建议将完整的命名空间放在 using 语句中。

      但是,您可以使用 using 别名来实现该语法,但它不会在语法之外添加任何有价值的东西。

      using V1 = DotNet.V1;
      
      ...
      
         V1.X.AClass a = new V1.X.AClass();
      

      此外,如果您使用的是 C# 3.0 或更高版本,则 var 关键字只需要您在赋值右侧键入完整的命名空间。

      var a = new DotNet.V1.X.AClass();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-02-22
        • 2016-02-09
        • 2011-10-05
        • 2011-05-05
        • 1970-01-01
        • 1970-01-01
        • 2011-03-13
        相关资源
        最近更新 更多