2012-11-07 70 views
0

我有一個奇怪的問題,並最終修復它。就像分享這種需求一樣,其他人將搜索這個主題並獲得答案。 我定義了2個部分類,並編譯了錯誤「不包含...的定義」。這很奇怪,因爲它在2個班級是個別班級時起作用。部分類不包含定義

下面是代碼:

前: Foo1.cs

public class foo1{public void xyz(){}} 

Foo2.cs

public class foo2{} 

後: Foo1.cs

public partial class foo1{ public void xyz(){}} 

Foo2.cs

public partial class foo1{} 

彙編表示「MyNamespace.foo1不包含xyz的定義」。但是,當班級不是部分時,xyz是好的!這可能是由不同的命名空間造成的。但我懷疑這一點。因爲如果名稱空間不同,它不會編譯。

我終於明白了。問題出在Foo1.cs中,命名空間沒有定義,但是它在Foo2.cs中定義。在定義分部類之前,編譯器爲Foo1.cs提供了一個默認名稱空間,它與Foo2.c中明確定義的名稱空間相同。但對於部分類,編譯器不會爲部分類提供默認名稱空間。這就是爲什麼當第三方調用foo1.xyz()時編譯器會抱怨。

我學到了一門課,除了不定義名稱空間之外,我總是爲每個單獨的cs文件明確地定義名稱空間。

+0

所以這個問題是封閉的,對吧? – lstern

+3

請將答案作爲自己問題的答案發布,然後單擊旁邊的複選標記以接受答案。否則,這個問題似乎沒有被該網站的其他訪問者回答。謝謝。 –

+0

(移除了我的其他評論。)要學習的經驗是,如果要使用「partial」聲明將不同類合併爲一個類,那麼這兩個部分必須位於同一個名稱空間中。如果沒有給出顯式名稱空間,則類型屬於全局名稱空間。 –

回答