0
我有用於訪問字段從父類像這樣一些性能:JIT是否可以從另一個類內聯私人字段訪問?
類A:B
private int _number = 42;
public virtual int Number { get { return _number; } }
類:A:
public override int Number { get { return base.Number + 1; } }
我的問題是,如果我訪問B.Number
,它仍然會解析爲直接訪問A._number
(+ 1)?
當然,這是假設優化的發佈版本。
更重要的是,訪問修飾符是抽象的嗎(因爲它們只在編譯時很重要,並且在運行時對代碼沒有影響),還是它們實際上限制了運行時的訪問(當然,除了使用Reflection時)?
特別是對於這種情況下,我不確定..但是,我知道JIT內聯自動屬性分配從同一類內(不要求我找到該參考),因爲他們只是方法調用與一條線(因此,很容易「內聯」)。但我不確定繼承如何在這種情況下發揮作用。 –
鑑於該屬性仍然是虛擬的,JIT *不能*將'B.Number'訪問內聯到簡單的字段訪問。它可能會封閉它 - 但如果你真的關心它,你應該打開調試器並查看彙編代碼來檢查。它可能與x64的x86不同。 –
我可以看到爲什麼會這樣,但是它不能檢測到什麼都不會覆蓋從B派生的類中的屬性並使其自動封閉該屬性?如果有人_does_覆蓋它並仍然調用'base.Number',那麼這個調用是否仍然被內聯? –