【发布时间】:2008-10-23 15:50:03
【问题描述】:
我正在使用 C#。默认情况下,当我在 Visual Studio 2008 中添加带有或不带有母版页的 Web 表单时,页面指令中的 AutoEventWireup 属性设置为 true。此属性在母版页主指令中也设置为 true。
我应该将 AutoEventWireup 设置为什么值(真/假)?
这两种价值观的优缺点是什么?
非常感谢任何帮助。
谢谢。
【问题讨论】:
我正在使用 C#。默认情况下,当我在 Visual Studio 2008 中添加带有或不带有母版页的 Web 表单时,页面指令中的 AutoEventWireup 属性设置为 true。此属性在母版页主指令中也设置为 true。
我应该将 AutoEventWireup 设置为什么值(真/假)?
这两种价值观的优缺点是什么?
非常感谢任何帮助。
谢谢。
【问题讨论】:
这是一种根据 Microsoft 设置的命名约定自动将事件处理程序连接到事件的方法。
如果我没记错的话,这是通过反射实现的。在运行时,ASP.NET 将检查您的类,查找具有与预期命名约定匹配的签名的方法,然后将它们连接起来作为各自事件的处理程序。
也就是说,优点是它是一种标准方法,可以省去您自己连接事件处理程序的麻烦。一个明显的“骗局”是它需要一个额外的步骤(反思),这比你自己做的成本要高一些。
在大多数情况下,反射“成本”是如此之少,以至于真的不值得一提,但重要的是要了解幕后发生的事情。
【讨论】:
这只会导致运行时自动将传统的页面生命周期方法(如 Page_Load)连接到其等效的事件处理程序 (Page.Load)。如果您将 AutoEventWireup 设置为 false,那么您需要类似以下内容:
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
}
而不是 MS 约定:
protected void Page_Load(object sender, EventArgs e)
{
}
您也不必担心调用 base.OnLoad,因为wireup 会自动执行此操作。但是,将其设置为 false 可能会带来一点性能优势 - 不过我从未验证过。
-内特·戴维斯
【讨论】:
如果它设置为 false,那么如果您有 Page_Load 或 Page_PreInit 之类的方法,它们将永远不会触发。 AutoEventWireup 意味着如果有这样命名的事件,它们应该有事件处理程序连接到这些事件。
【讨论】: