2008-12-16 205 views
5

昨天我認爲在WPF應用程序中實現自己的觸發器會很好。我創建了一個繼承TriggerBase的類MyTrigger。 TriggerBase是一個公共抽象類。所以繼承不是問題。但是這個類裏面的構造函數是內部標記的。編譯器拋出一個錯誤,因爲它不是有效的構造函數。爲什麼有人創建一個公共類,但將構造函數標記爲內部?內部構造函數

回答

9

如果您希望該類可見,但只允許它在您自己的程序集中進行子類化。這些子類本身可能有公共構造函數 - 或者它們可能會被工廠訪問。

我不能評論這是否是一個很好的WPF中的TriggerBase設計決策,但在某些情況下它至少是合理的。

5

我能想到的一個原因是新實例的實際創建將由同一個程序集中的另一個公共類來處理。這會迫使你通過這個其他類創建實例 - 可能是某種工廠模式實現。

2

它是公開的,因爲它用作帶有WPF(觸發器,MultiTrigger,EventTrigger,DataTrigger等)的觸發器的基類。它不是公開的,那麼你將無法將這些類標記爲公共。

構造函數是內部的,因爲它們不打算讓你自己使用它。我想你應該從上面提到的其中一個類派生出來。