4

如果有一个新项目(ProjNew),我想在其中放置几个​​在其他项目(ProjOld)上的类。

问题是我想维护标有 Obsolete 的旧类,以避免运行我所有的项目并检查他们是否使用它。

但是这样可能会引发一个模棱两可的类名错误,因为我没有通过命名空间显式调用。

有没有办法在过时的情况下说在歧义情况下使用什么程序集?

4

5 回答 5

4

不完全清楚你在问什么,但无论如何我都会试一试。

假设您有两个 DLL,old.dll 和 new.dll,它们都有一个类型为 C 的命名空间 N。您可以这样做:

csc /r:NEW=new.dll /r:OLD=old.dll foo.cs

然后在 foo.cs 你可以说

extern alias NEW;
extern alias OLD;
class D : NEW::N.C { }
class E : OLD::N.C { }

D 会继承 new.dll 中的 NC,E 会继承 old.dll 中的 NC。

这能解决你的问题吗?

于 2010-04-29T17:00:46.340 回答
2

我不确定我是否完全理解您的问题,但这可能会有所帮助。您可以使用 Using 指令来阐明要使用的类。一个例子:使用 ClassA = OldAssembly.ClassA;

任何对 ClassA 的引用都将引用 OldAssembly。

于 2010-04-29T16:16:53.753 回答
1

您可以将类创建为部分类,并标记您需要废弃的方法。

这将允许您将类划分为多个文件,并且仍然使用相同的类名。

于 2010-04-29T16:14:44.967 回答
0

好的。似乎如果我将同一个类添加到另一个命名空间,那么歧义错误只是我在编译时发生的。我担心它会在运行时发生,但我测试它并没有问题。

谢谢

于 2010-04-29T16:51:20.477 回答
0

用System.ObsoleteAttribute标记你的类

http://msdn.microsoft.com/en-us/library/system.obsoleteattribute.aspx

using System;

class Program
{
    static void Main()
    {
        MethodA();
    }

    [Obsolete("Use MethodB instead")]
    static void MethodA()
    {
    }

    static void MethodB()
    {
    }
}
于 2010-04-29T16:14:05.967 回答