2010-11-09 3 views
5

Я сейчас в сценарии, в котором я должен использовать частичные классы. В этом частичном классе у меня есть несколько методов, которые должны обрабатывать поля в другом классе.Поля класса доступа из частичного класса

, например

Edit: Я сожалею: первый класс уже объявлен 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 является государственной собственностью без сеттера.

Так что либо добавить сеттера при объявлении myString

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

или просто использовать

_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"; 

Edit:

Вы не необходимо отметить класс как частичный в обоих дворцах, этот компилирует штраф:

public class myClass 
    { 

     private string _myString; 

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


    public partial class myClass 
    { 

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

    } 
+0

Хотя он может скомпилировать все, в документации он говорит, что это необходимо. Вероятно, это хорошая идея сделать это в любом случае, чтобы быть последовательным и будущим доказательством. – Khalos

+0

Я просто следил за тем, что делает дизайнер форм ... озорной дизайнер winForms! – Pondidum

+0

Ха, это смешно. Кто-то не читал свои спецификации! – Khalos

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

парциальное класс в одном пространстве имен?