使事件处理方法静态有任何陷阱吗?

时间:2012-03-23 12:44:32

标签: c# events event-handling static-methods

我有以下代码(来自https://github.com/timabell/PageStructureBuilder),而且知识渊博的ReSharper建议我将DataFactoryCreatingPage()方法设为静态。

这是安全的,还是在用作事件处理程序时会引入潜在的错误?

public void Initialize(InitializationEngine context)
{
    DataFactory.Instance.CreatingPage += DataFactoryCreatingPage;
    DataFactory.Instance.MovedPage += DataFactoryMovedPage;
}

void DataFactoryCreatingPage(object sender, PageEventArgs e)
{
    var parentLink = e.Page.ParentLink;
    var page = e.Page;
    parentLink = GetNewParent(parentLink, page);

    e.Page.ParentLink = parentLink;
}

我想不出任何问题,但我想知道我的知识是否有差距。

谢谢!

2 个答案:

答案 0 :(得分:2)

没有理由说这个处理程序应该是静态的; ReSharper建议将其设置为静态的原因可能是因为你没有在其体内使用任何实例变量,所以没有坏处,但事件处理程序不应该是静态的,因为它们应该能够修改/使用类的内部字段提供处理程序的实现

答案 1 :(得分:1)

如果你的方法只使用传入的参数并且不访问任何成员变量,

Resharper会这样做。

你不必这样做。