我正在對我的應用程序進行一些重構,並且我想收集app.xaml.cs
中的全局初始化。App構造函數和app.Onstartup有什麼區別?
我有一些在構造函數和其他OnStartup
。
OnStartup似乎是在構造函數之後調用的。
這兩種方法有什麼區別?我應該把我所有的代碼放在哪裏?
我正在對我的應用程序進行一些重構,並且我想收集app.xaml.cs
中的全局初始化。App構造函數和app.Onstartup有什麼區別?
我有一些在構造函數和其他OnStartup
。
OnStartup似乎是在構造函數之後調用的。
這兩種方法有什麼區別?我應該把我所有的代碼放在哪裏?
沒有太大的區別,你可以從the source of System.Windows.Application
看到。
OnStartup
方法是從構造函數調用的最後一個方法。
如果您實現自己的構造函數,則OnStartup
已被觸發。此外,在獨特的情況下,您將覆蓋自己的OnStartup
實現可能會丟棄您已有的實現(如果您不撥打base
)。
就我個人而言,我仍然會爲OnStartup
去,但我想這並不重要。如果你不知道真正的執行順序,將兩者混合在一起可能會很危險。
例如,我可以在ctor中放置一個全局異常處理程序,剩下的部分放在onstartup中嗎? –
你可以這樣做,但異常處理程序只會在* OnStartup之後生效,正如Henk評論的那樣,這個「實現細節」非常重要。 –
值得指出的是,從構造函數中調用虛擬方法有一些指導原則。類應用程序正在打破所有規則。 –
有一個微妙的區別,ctor將永遠是第一個,也是'正確'的地方來初始化任何與類相關的東西,但不依賴於WPF框架。通常沒有。 OnStartup是Fx所說的「設置自己」的地方。如有疑問,請使用OnStart。 –
@HenkHolterman構造函數在這種情況下不是第一個,請看我的答案。順序是:base ctor> onstartup> own ctor。 –
是的,但我更願意考慮一個「實現細節」。可調整的。但是你是對的,如果OnStart需要它,就不能在ctor中初始化任何東西。 –