2017-01-02 112 views
1

我正在對我的應用程序進行一些重構,並且我想收集app.xaml.cs中的全局初始化。App構造函數和app.Onstartup有什麼區別?

我有一些在構造函數和其他OnStartup

OnStartup似乎是在構造函數之後調用的。

這兩種方法有什麼區別?我應該把我所有的代碼放在哪裏?

+0

有一個微妙的區別,ctor將永遠是第一個,也是'正確'的地方來初始化任何與類相關的東西,但不依賴於WPF框架。通常沒有。 OnStartup是Fx所說的「設置自己」的地方。如有疑問,請使用OnStart。 –

+0

@HenkHolterman構造函數在這種情況下不是第一個,請看我的答案。順序是:base ctor> onstartup> own ctor。 –

+1

是的,但我更願意考慮一個「實現細節」。可調整的。但是你是對的,如果OnStart需要它,就不能在ctor中初始化任何東西。 –

回答

2

沒有太大的區別,你可以從the source of System.Windows.Application看到。

OnStartup方法是從構造函數調用的最後一個方法。

如果您實現自己的構造函數,則OnStartup已被觸發。此外,在獨特的情況下,您將覆蓋自己的OnStartup實現可能會丟棄您已有的實現(如果您不撥打base)。

就我個人而言,我仍然會爲OnStartup去,但我想這並不重要。如果你不知道真正的執行順序,將兩者混合在一起可能會很危險。

+0

例如,我可以在ctor中放置一個全局異常處理程序,剩下的部分放在onstartup中嗎? –

+0

你可以這樣做,但異常處理程序只會在* OnStartup之後生效,正如Henk評論的那樣,這個「實現細節」非常重要。 –

+0

值得指出的是,從構造函數中調用虛擬方法有一些指導原則。類應用程序正在打破所有規則。 –

相關問題