Визуальная студия 2010 падает, когда происходит сборка - PullRequest
2 голосов
/ 31 мая 2011

моя часть кода

public int MyProperty { set { DoTask(); } }

private void DoTask()
{
    int MyValue = MyProperty;
}

У меня нет Get аксессора для MyProperty.Я попытался получить значение в DoTask().Когда я собираю это приложение в VS2010, оно вылетает из-за ошибки сборки.Разве это не ошибка?Поправь меня, если я ошибаюсь или неправильно понял.

С уважением, Umesh C

Ответы [ 3 ]

3 голосов
/ 31 мая 2011

Я обнаружил проблемы с кодом, который вы написали

public int MyProperty { set { DoTask(value); } }

private void DoTask(int value)
{
    int MyValue = value;
}

или

public int MyProperty { set { int MyValue = value; } }

ваш код не имеет никакого смысла ..

0 голосов
/ 31 мая 2011

Код явно НЕ должен вызывать бесконечный цикл, так как Getter for MyProperty не существует (читай: даже не приватный). Компилятор должен обнаружить это.

Тем не менее, лучшим дизайном было бы обеспечить публичный метод получения общедоступных настраиваемых свойств. Ваш код будет де-факто вызывать метод, так зачем вам вообще нужно это свойство? Просто сделайте ваш метод DoTask () общедоступным, и пусть клиенты вызывают его напрямую. Помните, что с вашим кодом у вас не было абсолютно никакой возможности получить значение MyProperty, даже из вашего класса.

0 голосов
/ 31 мая 2011

ясно, что это вызывает бесконечный цикл, который мое свойство вызывает dotask, а dotask вызывает myporpety, и это приводит к сбою компилятора. Решение, которое предоставляется при Pranay , является хорошей идеей, попробуйте использовать

, поэтому вам следуетспособ определения свойства изменить его на

private int m_MyProperty;
public int MyProperty { get {return m_MyProperty}set { DoTask(); m_MyProperty=value} }

private void DoTask () {int MyValue = m_MyProperty;}

DoTask Всегда считывает предыдущее значение MyProperty

...