2010-11-09 54 views
5

我目前處於必須使用部分類的場景中。 在這個部分類中,我有幾個方法需要處理其他類中的字段。來自部分類的訪問類字段

例如

編輯:對不起:第一類是已經聲明partial

public partial class myClass 
{   
    private string _myString; 

    public string myString 
    { 
     get { return _myString; } 
     set { _myString = value; } 
    } 
} 

public partial class myClass 
{ 
    public void doSomething() 
    { 
     myString = "newString"; 
    } 
} 

編譯器說myString不會在局部類存在!

我該如何克服這個問題?

回答

6

有您需要使用您發佈的代碼來解決幾件事情:

當在C#中使用部分類所有零件之類的必須聲明爲部分類

你有

public class myClass {} 
public partial class myClass {} 

這就需要成爲

public partial class myClass {} 
public partial class myClass {} 

其次,你要設置

myString="newString"; 

myString是沒有一個setter的公共屬性。

因此,要麼宣佈myString

public string myString 
{ 
    get{ return _myString; } 
    set { _myString = value; } 
} 

當您添加一個setter或者只是使用

_myString="newString"; 

在你的第二個疑問語氣類文件。

0

您只需標記類partial兩個地方,不只是其中之一。

0

當我把你的代碼到Visual Studio我得到一個不同的錯誤:如果我把它改成這樣

myString = "newString"; 
Error Property or indexer 'ConsoleApplication1.Program.myClass.myString' cannot be assigned to -- it is read only 

,它工作正常:

_myString = "newString"; 

編輯:

不要需要在兩個宮殿中標記一個類爲局部,這個編譯好:

public class myClass 
    { 

     private string _myString; 

     public string myString 
     { 
      get { return _myString; } 
     } 
    } 


    public partial class myClass 
    { 

     public void doSomething() 
     { 
      _myString = "newString"; 
     } 

    } 
+0

雖然它可能編譯得很好,但在文檔中說它是必需的。無論如何,它可能是一個好主意,以保持一致性和未來的證據。 – Khalos 2010-11-09 11:25:51

+0

我只是跟着窗體設計師做了什麼...頑皮的winForms設計師! – Pondidum 2010-11-09 11:28:32

+0

這是多麼有趣。有人沒有閱讀他們自己的規格! – Khalos 2010-11-09 11:32:14

1

假設兩個聲明指向同一個命名空間,你的第一個聲明沒有包括部分關鍵詞:

Using the partial keyword indicates that other parts of the class, struct, or interface can be defined within the namespace. All the parts must use the partial keyword. All of the parts must be available at compile time to form the final type. All the parts must have the same accessibility, such as public, private, and so on.public, private, and so on.

http://msdn.microsoft.com/en-en/library/wa80x488(v=VS.80).aspx

21

是在同一個命名空間中的局部類?