2008-10-08 35 views
8

我正在使用部分類來分割2個文件之間的某些功能,但出現錯誤。我究竟做錯了什麼?C#部分類錯誤

A1.cs:

private partial class A 
{ 
    private string SomeProperty { get { return "SomeGeneratedString"; } }  
} 

A2.cs:

private partial class A 
{ 
    void SomeFunction() 
    { 
     //trying to access this.SomeProperty produces the following compiler error, at least with C# 2.0 
     //error CS0117: 'A' does not contain a definition for 'SomeProperty' 
    } 
} 

回答

20

是在同一個命名空間中的兩個部分類?這可能是一個解釋。

+0

你走吧!謝謝 – 2015-11-19 09:56:29

5

不同的命名空間?

1

我認爲這是因爲你宣佈你的班級爲「私人」。嘗試將修飾符更改爲「內部」,以便類的兩個「半部」可以在同一個程序集中「看到」彼此。

+0

根據MSDN文檔,private只適用於部分類,只要它們都是私有的。 (我知道這個的原因是我以爲同樣的事情,因爲我只見過公開的部分類。所以我查了一下)。 http://msdn.microsoft.com/en-us/library/wa80x488.aspx – 2008-10-08 21:24:05

+0

奇怪。我在Visual Studio中打開了一個小控制檯應用程序,然後貼出OP的確切代碼,並且不會編譯。將修飾符更改爲「內部」,它編譯得很好。 – 2008-10-08 21:26:34

+0

不會是MSDN第一次出錯......;)但這可能太簡單了。當然值得挖掘,找到明確的答案。 – 2008-10-08 21:28:28

1

我得到的錯誤是:在一個命名空間中定義

元素不能被明確聲明爲private,protected或受保護的內部

我猜這是一個命名空間的問題,如前所述。

4

起初,我無法重現您的錯誤。

當這些局部類是單獨定義,命名空間內,私營關鍵字使構建失敗,「在命名空間中定義的元素不能被顯式聲明爲private,protected或受保護的內部」 ......

如果我將它們保密並將它們嵌套在另一個類中,則一切正常。

只有在一個文件中,我將類的一部分嵌套在另一個類中,並且在另一個文件中,我不會嵌套這個類,然後刪除private關鍵字,我才能重現您的錯誤。 :

的Class1.cs:

namespace stackoverflow.answers 
{ 
    public class Foo 
    { 
     private partial class Bar 
     { 
      private string SomeProperty { get { return "SomeGeneratedString"; } } 
     } 
    } 
} 

Class2.cs:

namespace stackoverflow.answers 
{ 
    partial class Bar 
    { 
     void SomeFunction() 
     { 
      string bar = this.SomeProperty; 
     } 
    }  
} 

我也得到您所描述的錯誤,如果命名空間是不同的。

請發佈解決方案的完整代碼,因爲提供的代碼是無效的C#語法,無法在沒有更多上下文的情況下查看。

0

我分析你的代碼。你聲明瞭部分類作爲嵌套類,這是因爲顯示錯誤。爲什麼bcz partial class不會聲明爲嵌套類parial關鍵字被拆分成多個文件,所以每個文件nae在嵌套類中聲明時都是相同的,它不會識別。

1

編輯:

解決方案:構建操作 - >請編譯,沒有別的

我會嘗試更加具體:

我有一個類3 3個部分類之間共享不同的文件。有一次,函數調用(從其他部分聲明的函數的一部分開始)顯示錯誤「在當前上下文中不存在」。我花了很長時間,直到有人helped我意識到我意外地將文件的構建動作設置爲「EmbeddedResourse」而不是「Compile」。

要切換構建操作,您應該右鍵單擊解決方案資源管理器中的文件,然後選擇屬性。然後更改構建操作。

這個問題很老,我的回答在這種情況下並不完全有幫助。但是在另一個與部分類相關的非常罕見的案例中可能會有所幫助。對不起,如果我的英文不清楚。

1

相同的答案@Andreyķ但簡單來說

設置爲「編譯」使用「屬性」每個這些文件的Windows中的所有部分類的生成操作

Properties window -> Build action property