2010-11-09 11 views
5

Jestem obecnie w scenariuszu, w którym muszę korzystać z klas częściowych. W tej klasie częściowej mam kilka metod, które muszą adresować pola w drugiej klasie.Pola klasy dostępu od klasy częściowej

np

Edit: Przepraszam: pierwsza klasa jest już ogłoszony partial!

public partial class myClass 
{   
    private string _myString; 

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

i

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

Kompilator mówi myString nie istnieje w częściowej klasy!

Jak mogę rozwiązać ten problem?

Odpowiedz

6

Istnieje kilka rzeczy, które trzeba rozwiązać w kodzie Wysłany:

Podczas korzystania częściowe klas w C# wszystkie części klasie muszą być zadeklarowane jako klas częściowych

Państwo mają

public class myClass {} 
public partial class myClass {} 

Który musi stać

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

drugie, starasz się ustawić

myString="newString"; 

ale myString jest własnością publiczną bez seter.

Więc albo dodać setter podczas deklarowania myString

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

lub po prostu użyć

_myString="newString"; 

w drugim pliku klasy partical.

0

Po prostu musisz oznaczyć klasę jako partial w miejscach, a nie tylko jednym z nich.

0

Kiedy umieścić swój kod w Visual Studio Mam inny błąd:

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

Gdybym go zmienić na tym, że działa prawidłowo:

_myString = "newString"; 

Edit:

Nie musisz do not należy oznaczyć klasy jako częściowe w obu pałacach, to kompiluje dobrze:

public class myClass 
    { 

     private string _myString; 

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


    public partial class myClass 
    { 

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

    } 
+0

Chociaż może się skompilować dobrze, w dokumentacji jest napisane, że jest wymagane. Prawdopodobnie jest to dobry pomysł, aby zrobić to konsekwentnie i na przyszłość. – Khalos

+0

Po prostu śledziłem to, co projektant formularzy robi ... niegrzeczny projektant winForms! – Pondidum

+0

Huh to zabawne. Ktoś nie przeczytał własnej specyfikacji! – Khalos

1

Zakładając, że zarówno deklaracja odnosi się do tej samej przestrzeni nazw, Twoja pierwsza deklaracja nie zawiera częściowe słowo:

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

jest częściowe klasy w tej samej przestrzeni nazw?

Powiązane problemy