我一直在思考的一个问题 - Stackoverflow 用户通常会在构造函数中实现重要的功能(特别是在派生自 System.Web.UI.Page 类的类中),还是应该让这里的逻辑尽可能简单并且而是在 OnPreInit 中实现功能(使用构造函数简单地实例化页面其余部分功能所需的对象/值)?这种情况是否有“最佳实践”方法?
这个问题的背景:
我正在处理的系统具有相当深的页面层次结构 - 实际页面派生自大约 10 个链接的页面对象:
-- System.Web.UI.Page ----- CustomPage1 : System.Web.UI.Page -------- CustomPage2 : CustomPage1 - - - - - ETC
每个页面都添加了一个特定的功能,并且通常依赖于自定义页面构造函数中运行的代码,或者功能本身在构建期间直接运行。
最能说明我的问题的示例是将自定义对象从我们的数据库加载到页面的页面,以便它们在页面生命周期中可用 - 在页面构建期间,与数据库建立连接,然后使用正确的值填充公共属性。
在我看来,这最好从 OnPreInit 事件中完成,主要是因为我们在父逻辑运行之前有更大的灵活性来执行一些页面级别的检查(例如,我们是否应该阻止调用此功能)(假设在构造函数中的顺序执行将在子类之前构造父类)。从 OO 的角度来看,OnPreInit 似乎是实现此功能的更合适的领域 - 页面构建应该处理页面的构建、设置任何默认值等,然后 OnPreInit 将用于执行在页面的生命周期。