一个类能否同时存在于两个命名空间中,如何实现这一点?
为了澄清:我们有一个类库(假设根命名空间是classLib1),随着时间的推移它变得越来越大(添加了更多的类),我想将类逻辑分组到不同的命名空间中。然而,一些旧的类需要被分组到这些新的命名空间中(例如classLib1.section1),这样做会破坏其他使用该类库的程序集中的遗留代码。因此,在我们逐步淘汰旧代码之前,我希望能够同时使用两个命名空间来引用一个类。
我找不到任何关于这个问题的信息,这表明人们不想这样做有很好的理由!?!
一个类能否同时存在于两个命名空间中,如何实现这一点?
为了澄清:我们有一个类库(假设根命名空间是classLib1),随着时间的推移它变得越来越大(添加了更多的类),我想将类逻辑分组到不同的命名空间中。然而,一些旧的类需要被分组到这些新的命名空间中(例如classLib1.section1),这样做会破坏其他使用该类库的程序集中的遗留代码。因此,在我们逐步淘汰旧代码之前,我希望能够同时使用两个命名空间来引用一个类。
我找不到任何关于这个问题的信息,这表明人们不想这样做有很好的理由!?!
不,无法为单个类指定两个名称(命名空间实际上只是类名的一部分)。
作为解决方法,您可以将类移动到新位置,并在旧位置创建围绕它们的薄包装器(外观模式)。当然,更好的解决方案是将类移动并相应地修复遗留代码。
类型转发是在.net 2.0中引入的,这意味着您可以使用TypeForwardedToAttribute
属性来指示最初存在于AssemblyX中的类型现在应在AssemblyY中找到。
我相当确定只有在将其分成多个程序集时才适用/适用,但即使不是如此,也值得知道。
作为一种解决方法,当您需要时,可以将该类“using”到第二个命名空间中:
namespace classLib1.section2
{
public myBigClass
{
在旧命名空间中使用它的每个文件中,您可以添加一行代码
namespace classLib1.section1
{
using myBigClass = classLib1.section2.myBigClass;