我有一些類,它們有幾種我並不真正想去的方法,但只是因爲XML序列化程序需要它們。無論如何,如果從用戶代碼調用它們,會產生編譯時錯誤/警告?有什麼辦法可以阻止在編譯時調用的方法嗎?
我知道我可以實現IXmlSerializable,而且我也知道我可以將這些類分離爲純數據存儲類,但是,我並沒有問我應該如何設計這樣一個系統,我是簡單地詢問是否有一種方法來生成編譯時錯誤/警告,如果他們是通過什麼不是XML序列稱爲...
我有一些類,它們有幾種我並不真正想去的方法,但只是因爲XML序列化程序需要它們。無論如何,如果從用戶代碼調用它們,會產生編譯時錯誤/警告?有什麼辦法可以阻止在編譯時調用的方法嗎?
我知道我可以實現IXmlSerializable,而且我也知道我可以將這些類分離爲純數據存儲類,但是,我並沒有問我應該如何設計這樣一個系統,我是簡單地詢問是否有一種方法來生成編譯時錯誤/警告,如果他們是通過什麼不是XML序列稱爲...
非常好,謝謝 – 2010-01-29 09:28:09
[Obsolete],與OP的意圖不同。我不認爲這是這個屬性被用來使用的方式。 – 2010-01-29 09:28:13
@Pop:當然,目的可能略有不同,但結果可能正是要求的。 – 2010-01-29 09:30:16
您可以使用ObsoleteAttribute修飾相關成員。它的意圖有點不同,但從用戶代碼調用時會產生編譯器警告(或錯誤)。
您可以使用[EditorBrowsable]屬性隱藏用戶intellisense中的方法,也可以使用[Browsable]屬性從屬性設計器中隱藏方法。
我不推薦使用[ObsoleteAttribute],因爲它表達了實際狀態的不同含義。而應使用註釋,指出該方法不應在用戶代碼中使用。
而且請記住,有一些編譯他們的代碼威脅警告視爲錯誤,這將使他們無法編譯有效代碼,在此情況下,用戶的很多的。
ObsoleteAttribute傳達的含義稍有不同,但具有所需的行爲。我認爲EditorBrowsable實際上並不具有「你不應該從用戶代碼中調用它」的含義 - 也不會產生警告或錯誤,這是本例中所需的行爲。 – 2010-01-29 09:41:57
Jon的答案對我來說非常重要,因爲我正在重構一些舊代碼,並且我沒有時間現在完全重新設計它,所以如果我能擺脫編譯時錯誤的不良對象使用模式,這對我來說是一個巨大的勝利 - 當然不是理想的電腦禪宗的驚人之處,但是大獲全勝。 – 2010-01-29 09:45:32
@Matt Whitfield +1爲實用主義 – 2010-01-29 10:52:41
另見http://stackoverflow.com/questions/968249/c-create-custom-warning-in-visual-studio-if-certain-method-is-used-in-source-co – 2010-01-29 09:28:16