簡體   English   中英

覆蓋虛擬屬性時如何避免無限循環?

[英]How do I avoid an infinite loop when overriding a virtual property?

當我分配或檢索值時,是否可以忽略設置和獲取?

具體來說,我從具有這樣聲明的屬性的類繼承:

virtual public Int32 Value { get; set; }

我想做的是重寫它,並在這些set和get中做一些有用的事情。 當我覆蓋它時出現問題,我也必須手動分配或從屬性返回值。 如果我做這樣的事情:

override public Int32 Value
{
    get
    {
        return this.Value;
    }
    set
    {
        this.Value = value;
        // do something useful
    }

然后創建一個無限循環。 有沒有一種方法可以設置或獲取值而無需調用set and get中的代碼,還是必須為實際變量命名一個單獨的名稱?

而不是使用的this.Value ,你應該使用base.Value 這將檢索/設置基類中的屬性。

請注意,基本方法實際上必須是可重寫的( virtualabstract )。 在您的示例中不是。 如果基本方法不是虛擬的,那么當您嘗試在派生類中重寫時,您只會得到一個編譯器錯誤。

您追求的關鍵字是base關鍵字, 在此處記錄 這迫使編譯器將屬性引用解析為基類中定義的引用。 VB.NET的等效項是MyBase。

從而:

get 
{ 
    return base.Value; 
} 
set 
{ 
    base.Value = value; 
    // do something useful 
} 

暫無
暫無

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

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