2010-04-29 107 views
4

如果有一个新项目(ProjNew),我想在其他项目(ProjOld)上放置几个班级。暧昧的班级名称

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

但是这样可能会引发模糊的类名错误,因为我没有明确地通过名称空间进行调用。

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

回答

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() 
    { 
    } 
} 
+0

这是否说明OP需要有2个同名的类?一个类可以被标记为过时,而同一名称空间中使用了另一个具有相同名称的类? (通过它的外观,您的示例演示了将类成员标记为已过时,而不是类本身) – 2010-04-29 16:17:37

1

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

这将允许您将您的课程分成多个文件,并仍然使用相同的课程名称。

+1

部分类不会跨越程序集边界。 – 2010-04-29 16:56:29

+0

啊!我没有意识到,但它是有道理的。欢呼埃里克的头。 – 2010-04-30 09:27:40

2

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

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

0

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

感谢

4

这是不完全清楚你问什么,但我给它一个想试试。

假设你有两个DLL,old.dll和new.dll,这两者有一个C型命名空间ň你可以这样做:

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。

这是否解决您的问题?