暧昧的班级名称

时间:2010-04-29 16:11:14

标签: c# class obsolete ambiguous

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

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

但是这样可能会产生一个模糊的类名错误,因为我没有显式调用命名空间。

有没有办法在过时的模糊情况下使用哪个程序集?

5 个答案:

答案 0 :(得分: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中的N.C继承,E将从old.dll中的N.C继承。

这能解决您的问题吗?

答案 1 :(得分:2)

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

然后,对ClassA的任何引用都将引用OldAssembly。

答案 2 :(得分:1)

您可以将类创建为partial classes并标记您需要过时的方法。

这样您就可以将类划分为多个文件,并且仍然使用相同的类名。

答案 3 :(得分: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()
    {
    }
}

答案 4 :(得分:0)

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

由于