В начале был код:Ленивого свойства получать значение перед первым получить
public abstract class A
{
private string _someValue;
public string SomeValue
{
get
{
if (_someValue == null)
_someValue = GetValue();
return _someValue;
}
}
protected virtual string GetValue() { /* logic */ }
}
public class B : A
{
protected override string GetValue()
{
return base.GetValue() + GetMoreValue();
}
private string GetMoreValue() { /* logic */ }
}
И сказал код, «Пусть будет ошибка!» и были ошибки.
Серьезно сейчас.
У меня есть экземпляр B
, и когда я получаю SomeValue
, я получаю то же SomeValue
из A
, без MoreValue.
Равномерное страннее часть, когда я поставил точку останова на SomeValue
«s Получить метод:
Оказывается, что _someValue
получает значение перед Get метод всегда называется.
Что-то здесь очень не так.
UPDATE:
Спасибо за комментарии! Сокращенный код и добавленный забытый тип возврата в методе B.
Просьба указать [SSCCE] (http://sscce.org/). – nvoigt
Сделайте свой код компилируемым (B.GetValue() требует типа возврата; A.GetValue() и B.GetMoreValue() нуждается в инициализированном возврате), затем отлаживаем ваш пример, и вы увидите, что он работает как ожидается (B.SomeValue содержит оба из ваших значений). Моя ставка заключается в том, что ошибка, которую вы ищете, находится где-то в коде слева, поэтому вы уже сделали очень важный шаг для ее поиска. – Jan
Я проверяю, что он работает хорошо, вызывается 'GetMoreValue' из B. Я что-то пропустил? – Thomas