如果有一個新項目(ProjNew),我想在其他項目(ProjOld)上放置幾個班級。曖昧的班級名稱
問題是我想維護標記爲Obsolete的舊類以避免運行我的所有項目並檢查它們是否使用它。
但是這樣可能會引發模糊的類名錯誤,因爲我沒有明確地通過名稱空間進行調用。
有沒有辦法在過時的情況下說什麼程序集在歧義情況下使用?
如果有一個新項目(ProjNew),我想在其他項目(ProjOld)上放置幾個班級。曖昧的班級名稱
問題是我想維護標記爲Obsolete的舊類以避免運行我的所有項目並檢查它們是否使用它。
但是這樣可能會引發模糊的類名錯誤,因爲我沒有明確地通過名稱空間進行調用。
有沒有辦法在過時的情況下說什麼程序集在歧義情況下使用?
標記您的班級,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()
{
}
}
您可以創建類爲partial classes並標記你需要過時的方法。
這將允許您將您的課程分成多個文件,並仍然使用相同的課程名稱。
部分類不會跨越程序集邊界。 – 2010-04-29 16:56:29
啊!我沒有意識到,但它是有道理的。歡呼埃裏克的頭。 – 2010-04-30 09:27:40
我不確定我是否完全理解您的問題,但這可能有所幫助。您可以使用Using指令來闡明要使用哪個類。示例: 使用ClassA = OldAssembly.ClassA;
任何對ClassA的引用都會引用OldAssembly。
好的。看來,如果我將相同的類添加到另一個命名空間,ambiguos錯誤只是我在編譯時發生的。 我擔心它會在運行時發生,但我測試它並沒有問題。
感謝
這是不完全清楚你問什麼,但我給它一個想試試。
假設你有兩個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。
這是否解決您的問題?
這是否說明OP需要有2個同名的類?一個類可以被標記爲過時,而同一名稱空間中使用了另一個具有相同名稱的類? (通過它的外觀,您的示例演示了將類成員標記爲已過時,而不是類本身) – 2010-04-29 16:17:37