是否可以让一个类驻留在两个名称空间内,我该怎么做?
澄清一下:我们有一个类库(比如root命名空间是classLib1),它随着时间的推移而增长(更多的类),我想在逻辑上将类分组到不同的命名空间。 但是,某些较旧的类需要分组到这些新的命名空间(例如classLib1.section1),这样做会破坏使用此类库的其他程序集中的遗留代码。所以我希望能够使用两个名称空间来引用一个类,直到我们可以逐步淘汰旧类。
我找不到任何关于此的信息,这表明人们不想这样做的原因!?!
答案 0 :(得分:22)
不,没有办法给单个类两个名称(命名空间实际上只是类名的一部分)。
作为一种变通方法,您可以将类移动到新位置,并在旧位置(Facade Pattern)周围创建薄包装器。当然,更好的解决方案是移动类并相应地修复遗留代码。
答案 1 :(得分:4)
作为一种解决方法,您可以在需要时将该类“使用”到第二个命名空间中:
namespace classLib1.section2
{
public myBigClass
{
并且在旧命名空间中使用它的每个文件中都可以添加一行
namespace classLib1.section1
{
using myBigClass = classLib1.section2.myBigClass;
作为临时补丁,直到你正确修复它。
答案 2 :(得分:4)
Type Forwarding是在.net 2.0中引入的,这意味着您可以使用TypeForwardedToAttribute
属性来指示现在可以在AssemblyY中找到最初存在于AssemblyX中的类型。
我很确定如果你分成多个组件,这只是适当/适用的,但即使没有,也值得知道。