2017-02-19 60 views
0

讓我們來看看這個代碼片斷:只有在所有者類中才能通過屬性訪問成員?

class A { 
    int m_x; 
    public int x { 
     get { return m_x; } 
     set { ... } 
    } 
} 

m_x是私有因此它在A級訪問,但其他類只能通過公共x屬性來訪問它。

我有方法,其中必須每次x被改變。 (這是在set { ... }

我的問題是,在A類我可以直接改變m_x值。

  • 這樣,「必須被稱爲」方法不會被調用。

當前這個錯誤的唯一指標是m_前綴。

有沒有辦法編譯時檢查?

+0

但是,如果是一個私人領域,它可以改變只能通過*你的*代碼,你可以控制,對吧? –

+0

是的,但存在人爲錯誤因素。如果在我疲憊的時刻之一,我會寫m_x而不是x,我將不得不尋找幾個小時的錯誤來源。 – Tudvari

回答

1

有沒有辦法編譯時檢查?

不,類A應該知道每次設置專用字段時都必須調用該方法。這是該類實際實現的內部邏輯的一部分。

編譯器無法阻止您設置專用字段,而無需先調用方法。這將是該類開發人員的責任,而不是編譯器。

相關問題