Доступ к полям класса из частичного класса - PullRequest
7 голосов
/ 09 ноября 2010

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

, например

Редактировать: извините: первый класс уже объявлен 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 не существует в частичном классе!

Как мне преодолетьэта проблема?

Ответы [ 5 ]

30 голосов
/ 09 ноября 2010

Распространенной проблемой является наличие частичных классов в разных пространствах имен. Пространства имен являются частью имени класса, namespace1.myClass и namespace.a.myClass обрабатываются как два совершенно отдельных класса.

Согласно MSDN , каждая часть частичного класса должна:

  • имеет модификатор partial
  • имеют то же имя класса
  • находиться в том же пространстве имен
  • находиться в той же сборке или DLL
  • имеют одинаковую видимость (например, общедоступные, частные и т. Д.)
8 голосов
/ 09 ноября 2010

Есть несколько вещей, которые нужно исправить с помощью кода, который вы разместили:

При использовании частичных классов в 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";

во втором файле частичного класса.

1 голос
/ 09 ноября 2010

Когда я помещаю ваш код в 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";
        }

    }
1 голос
/ 09 ноября 2010

Предполагая, что оба объявления относятся к одному и тому же пространству имен, ваше первое объявление не содержит ключевого слова частичного:

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

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

0 голосов
/ 09 ноября 2010

Вы просто должны пометить класс как partial в обоих местах, а не только в одном из них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...