2010-03-21 128 views
2

當我分配或檢索一個值時,是否可以忽略set和get?如何在覆蓋虛擬財產時避免無限循環?

具體而言,我從宣佈這樣一個屬性類繼承:

virtual public Int32 Value { get; set; } 

我想要做的是覆蓋它,並做一些這些設置非常有用,並得到的。當我覆蓋它時,問題就會出現,我也必須手動賦值,或者從屬性返回值。如果我這樣做:

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

然後我創建一個無限循環。有沒有一種方法來設置或獲取值,而無需調用set中的代碼並獲取,還是必須爲實際變量創建一個單獨的名稱?

回答

6

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

請注意,基本方法實際上必須被覆蓋(virtualabstract);在你的例子中它不是。如果基本方法不是虛擬的,那麼當你嘗試在派生類中重寫時,你會得到一個編譯器錯誤。

+0

那麼,它實際上是虛擬的,我只是忘了它在此輸入,非常感謝。 – Cbsch

1

您之後的關鍵字是base,documented here。這會強制編譯器將屬性引用解析爲基類中定義的引用。 VB.NET等價物是MyBase。

這樣:

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