在C#中,如何将所有类从一个名称空间导入另一个名称空间,以便可以从第二个名称空间直接访问这些类?
我实际上是在尝试以外部可见的方式重命名命名空间。
因为代码值得千言万语,所以给定一个带有以下命名空间的DLL:
// Externally written DLL I have no control over.
namespace A
{
class ClassA {...}
}
我希望能够创建另一个DLL:
// My DLL
namespace Wrapper
{
using A;
}
所以我可以像以下一样使用它:
// Final C# program.
using Wrapper;
var a = ClassA();
在python中,我可以用import *
完成我想要的东西:
# external.py
class ClassA:
...
# mymodule.py
from external import *
# final_program.py
import mymodule
a = mymodule.ClassA()
我知道这是一个可怕的想法,但遗憾的是我受到外部要求的限制。简短的版本是我有一个外部DLL需要与专有系统接口(EnScript,如果你很好奇)。这个专有系统对外部DLL当然违反命名空间的命名有限制。因此,我试图使用包装器DLL来公开被认为有效的命名空间。
在java / python中谈论C#中的using
与通配符导入。不解决从第二个命名空间访问的问题:
关于在命名空间中包含类的问题。问题是使用单独的项目,因此不适用于这个问题:
答案 0 :(得分:0)
您无法将类型移动到其他命名空间(除了物理移动代码之外)。 .NET类型系统使用完整命名空间来唯一标识类型。
但是你可以创建一个别名来掩盖原始命名空间。
假设您有一个班级MyProject.Foo.Bar.Xyzzy.MyClass
,而您厌倦了输入MyProject.Foo.bar.Xyzzy
。您可以在代码文件的顶部添加Using指令,如下所示:
Using DifferentNamespace = MyProject.Foo.Bar.Xyzzy;
完成此操作后,您只需
即可参考该课程var c = new DifferentNamespace.MyClass();
您甚至可以使用它在当前默认命名空间中包含不同的命名空间。这将编译:
namespace Example.Classes
{
class MyClass
{
}
}
namespace Example
{
using Example = Example.Classes;
class Test
{
static void Test1()
{
var c = new Example.MyClass(); //Not Example.Classes.MyClass
}
}
}
但不幸的是你必须把别名留在那里;即,这不会编译:
namespace Example.Classes
{
class MyClass
{
}
}
namespace Example
{
using Example = Example.Classes;
class Test
{
static void Test1()
{
var c = new MyClass(); //Error
}
}
}