2013-01-02 107 views
0

例如: 我有一個帶有1個屬性的用戶控件(可通過屬性網格編輯)稱爲「標題」。 如果屬性「標題」爲空,有一種方法可以引發編譯時異常?或者所有的設計時間屬性都是可選的?我可以在用戶控件內強制編譯錯誤嗎?

+4

AFAIK,這是不可能的 –

+0

如何在構造函數中要求它? – Adam

+0

這是一個用戶控件,構造函數調用是自動生成的。我需要使用無參數的構造函數。 – Stew

回答

3

編譯時沒有辦法確保設置特定的屬性。如果編譯代碼但是這不是您想要的,則可以使用#error指令導致編譯時錯誤或編譯時警告#warning

確保設置特定屬性或方法有兩種方法。首先是在構造函數中要求它,或者檢查它是否已經在後續的方法或屬性中設置。這是一個運行時檢查,不是編譯時間,正如你所說的,你在UserControl中有某些限制。

第二種方法是使用代碼分析工具,如FXCop。您可以編寫一個自定義規則來標識UserControl的所有實例,並確保已在所有實例上設置該屬性。對於Roslyn或PostSharp也可能是這樣,但我對這些工具不太熟悉。

FXCop等代碼分析工具存在的問題是學習曲線陡峭。編程語言很複雜,這些工具需要揭示覆雜性。我的建議是使用默認值,如「在此處插入標題」,或者在不太合適的情況下,即使沒有合適的默認值,也會在控件呈現描述性消息時引發異常。

查看Good way to ensure that a property on a UserControl gets set?的類似情況。

相關問題