0

В начале был код:Ленивого свойства получать значение перед первым получить

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.

+1

Просьба указать [SSCCE] (http://sscce.org/). – nvoigt

+4

Сделайте свой код компилируемым (B.GetValue() требует типа возврата; A.GetValue() и B.GetMoreValue() нуждается в инициализированном возврате), затем отлаживаем ваш пример, и вы увидите, что он работает как ожидается (B.SomeValue содержит оба из ваших значений). Моя ставка заключается в том, что ошибка, которую вы ищете, находится где-то в коде слева, поэтому вы уже сделали очень важный шаг для ее поиска. – Jan

+0

Я проверяю, что он работает хорошо, вызывается 'GetMoreValue' из B. Я что-то пропустил? – Thomas

ответ

0

Оказывается, я делал глупую ошибку.
(я бы удалить этот вопрос, но я полагал, что другие могут узнать из моего ляп.)

я имел часы на SomeValue.

В результате? Get SomeValue был назван моментом, когда я начал отлаживать.
(что немного странно, потому что я имел точку останова на Get метод, который не активировать. По какой-то причине, watch эс не вызывают контрольные точки.)

* (Что касается неправильного значения, что не имело никакого отношения к наследованию -
GetMoreValue просто произошло, чтобы вернуть пустую строку.)

Смежные вопросы