簡體   English   中英

懶惰的財產先得到價值

[英]Lazy property getting value before first get

最初有代碼:

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 ,我得到相同SomeValueA ,而MoreValue。

當我在SomeValue的Get方法上設置斷點時,出現了更奇怪的部分:
事實證明, _someValue調用Get方法之前獲取其值。

這里有些錯誤。


更新:
感謝您的評論! 縮短代碼,並在B方法中添加了忘記的返回類型。

原來我犯了一個愚蠢的錯誤。
(我將刪除該問題,但我認為其他人可以從我的工作人員那里學習。)

我看了SomeValue

結果? 我開始調試的那一刻被稱為Get SomeValue
(這有點奇怪,因為我在Get方法上有一個未激活的斷點。由於某種原因, watch es不會觸發斷點。)

*(至於錯誤的值,與繼承無關-
GetMoreValue只是碰巧返回了一個空字符串。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM