组织事件处理程序方法

时间:2011-07-13 05:28:31

标签: c# asp.net delegates event-handling

我在网络表单中使用asp.net和c#。

使用Visual Studio,它会自动为我的控件创建事件处理程序方法。 VS以这种方式idControl_event生成方法名称。我知道我可以给事件处理程序方法命名。

  • 所以我想知道你最喜欢命名主题的方法是什么。

  • 我想知道是否可以使用Web窗体在单独的类中编写事件处理程序方法(而不是在特定网页的代码后面)以及如何从Control调用主题。

感谢您的时间。

3 个答案:

答案 0 :(得分:1)

对于事件处理程序名称,我通常使用Visual Studio默认生成的格式:[idControl] _ [eventName]。但这是个人/团队的偏好。我见过类似的讨论,例如this onethis one。无论您如何选择为事件处理程序命名,我认为最重要的是保持一致。

至于你的代码之外的事件处理程序,我没有经常看到这样做,但它是可能的。最简单的方法是在具有公共事件处理逻辑的单独类中使用静态方法。例如,以下是如何在单独的类中为Page.Loaded提供标准逻辑。我相信你需要通过代码注册事件处理程序 - 我认为你不能在标记(aspx)中做到这一点。

public static class CommonEventHandlers
{
    public static void Page_Loaded(object sender, EventArgs e)
    {
        //Do any standard logic

        //If you need a reference to the page that raised the event, 
        //   you can get it from the 'sender' parameter.
        Page page = (Page)sender;

        //Do something with 'page'
    }
}

然后在您要使用该公共事件处理程序的页面的代码隐藏中:

public partial class WebForm1 : System.Web.UI.Page
{
    public WebForm1()
    {
        //Register the handler via code in the constructor
        Load += CommonEventHandlers.Page_Loaded;
    }
}

作为另一种选择,您可以使用继承来帮助重用代码。例如,您可以拥有一个基类,您的Pages继承自具有标准处理程序的基类。这样做的一个好处是,您可以在标记中注册事件处理程序,即使该方法是在基类中声明的,因此您不需要在祖先页面的代码隐藏中执行任何操作。

答案 1 :(得分:0)

我认为你不能在另一个类中拥有事件处理程序,你可能得到的最好的可能是在一个单独的部分类文件中

答案 2 :(得分:0)

正如@Daniel Powell所说,我非常确定你能用事件做的最好的事情就是将它们放在一个不同的文件中作为你的代码隐藏的部分类。

关于命名约定,95%的时间我看到像你所说的事件 - idControl_event。这就是我给它们命名的方式,因为当我查看源代码时,可以很容易地将代码绑定到控件上。