2010-04-29 102 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。

這是否解決您的問題?