简体   繁体   中英

using namespace in C# from CLI/C++ class

This might be a C#-noob question...

Assume I have the following CLI/C++ header:

namespace DotNet {
  namespace V1 {
    namespace X {


      public ref class AClass {
      public:

        AClass() {}
        void foo() {}

        static void bar() {}
      };
    }
  }

}

Then from C# I do the following:

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

I get:

Program.cs(18,7): error CS0246: The type or namespace name 'V1' could not be found (are you missing a using directive or an assembly reference?)

Same with:

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

Program.cs(18,7): error CS0246: The type or namespace name 'X' could not be found (are you missing a using directive or an assembly reference?)

What works is:

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

Or

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

So either I have to use the full namespace path, or I have to open all of the path to access the class. Is there anything I can do about this? I would like to be able to open only a part of it.

So either I have to use the full namespace path, or I have to open all of the path to access the class.

Yes.

Is there anything I can do about this?

Not that I'm aware of. Why would you not just want a using directive for the whole namespace? Isn't that the simplest approach?

Note that this has nothing to do with C++/CLI. The same is true whatever the source language is - so you can see it with C# as well:

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

As Jon Skeet stated you have to include the full namespace in either the using statement or each time you reference it in code. I recommend just placing the full namespace in the using statement.

You can, however, achieve that syntax with a using alias, but it does not add anything of value outside of syntax.

using V1 = DotNet.V1;

...

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

Also if you are using C# version 3.0 or higher the var keyword will only require you type out the full namespace on the right side of the assignment.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM