2016-12-10 65 views
1

我的理解是,當我在c#中創建一個速記屬性時,它將轉換爲爲其編譯後創建的字段。在C#中覆蓋速記屬性

class Hello { 
    public bool Hi { set ; get ; } 
} 

我的問題是,如果速記屬性是虛擬的,然後重寫會發生什麼:

class Hello { 
    virtual public bool Hi { set ; get ; } 
} 

//The class and the property can't have the same name 
//class Hi : Hello { 
class Bonjour : Hello { 
    override public bool Hi { 
    set { } 
    get { return true ; } 
    } 
} 

我已經完全覆蓋了虛擬財產。當編譯類Hi時,這仍然會生成一個字段,我將無法訪問?

謝謝。

回答

2

是,本場將仍然產生,爲您Hello仍然需要在自己的使用。

如果要訪問Bonjour類中的基礎字段,可以通過base.Hi引用基本屬性。

如果你從來沒有打算爲Hello類是自身首先使用,使課堂財產abstract。那麼將不會生成字段。

Here's an example當您編譯然後反編譯這兩種情況時會發生什麼。

+0

我相信這是真的。 –

+0

@Tony我已經添加了一個鏈接,顯示它肯定是真的:) –

+0

感謝您指出我的例子的問題 – edincanada