2013-06-04 63 views
2

我有一個基類的命名空間:無法訪問其他名稱空間中的繼承類?

namespace n1 
{ 
public class c1 
{ 
} 
} 

在同一個命名空間中另一類是從c1繼承:

namespace n1 
{ 
public class c2:c1 
{ 
} 
} 

我想在另一個命名空間n2創造c2一個實例,因爲n1是一個庫,n2是一個Windows窗體項目,我想使用該庫的類。我添加了對n1的引用。但是,當我嘗試:

using n1;  

namespace n2 
{ 
public class c3 
{ 
    public c1 c1Instance=new c1(); 
    public c2 c2Instance=new c2(); 
} 
} 

我收到此錯誤信息:

類型或命名空間名稱「C2」找不到

我不跟c1收到此錯誤。

繼承類只是私有的嗎?

+0

您的代碼中必須有其他內容,因爲上述方案應該可以正常工作。 –

+0

@MattGreer我認爲微妙的是'c2'和'c1'不在同一個項目中。在C#中,命名空間並不意味着什麼,它所在的項目可能就是您的問題所在。 –

+0

是類c2在類c1相同的dll的定義?也許你有兩個具有相同命名空間的庫。 – Bronek

回答

2

您需要引用上述兩個項目或包含C2

+0

我添加了一個參考。剛剛編輯我的帖子上面。 – sigil

+1

不是對命名空間的引用,對項目/ dll的引用。 'c2'和'c1'在不同的程序集中(分別是一個WinForms項目和一個庫),所以它們的相應程序集必須被具有'c3'的程序集引用,以便從'c3' 。 –

+0

@Tims,我引用了圖書館項目的dll;我可以無誤地創建一個c1。這只是繼承,似乎是問題所在。 – sigil

0

你只需要刪除引用的DLL(包含提到型「C2」)從列表中參考和引用庫DLL再次(無論是作爲DLL或項目,如果它連接到解決方案)。

它是通過實踐發現的,沒有找到原因。但最常見的來源是直接將dll引用到另一個項目的workshop文件夾中(例如x86 \ Releasebin \ Debug)。因此,在開發人員工作期間,我們經常更改配置和/或平臺很多次,最後是列表參考文獻可能引用了不在預期編譯位置的dll庫。在這種情況下,更好的解決方案是將我們的dll保存在名爲'libs'的單獨文件夾中,並且引用它,或者如果每次編譯主項目時編譯其他項目都沒有問題,請參閱庫項目