C#方法名称中的前缀“On”是否意味着什么?

时间:2013-09-09 17:14:26

标签: c# events methods keyword

任何人都可以帮助我解决这个困惑吗?我在C#示例中看到的方法是否有特殊含义,第三方软件,特别是处理事件的方法,以前缀“On”开头?

换句话说,这是语言惯例吗?推荐?还是KeyWord?

感谢您的帮助。

2 个答案:

答案 0 :(得分:9)

惯例是一个触发事件的方法将以“On”为前缀,即OnSomeEvent,当被调用时,将触发SomeEvent事件。没有关键字或其他语言构造会强制使用“On”前缀;这只是一个惯例。

当您需要允许从类定义之外显式触发事件时(通常来自继承类,因此通常为protected),通常也会使用创建此类方法。如果类的设计使得事件只是从定义它的类中触发,那么通常不会有任何“On”方法,这就是为什么在许多情况下你没有看到它的原因。

答案 1 :(得分:8)

根据评论:

  

谢谢。你碰巧知道你添加的内容的任何URL。我需要更多的澄清来解释它。

这只是为了解释;作为一般情况的完整示例,这是已建立的约定 - 不是规则 - 有强制执行此操作 - 它只是许多代码使用的常见模式:

public class SomeBaseClassWithAnEvent
{
    public event EventHandler SomeEvent;

    protected virtual void OnSomeEvent()
    {
        var handler = SomeEvent;
        if (handler != null) handler(this, EventArgs.Empty);
    }

    public void SomeOtherMethodThatHasSideEvents()
    {
        //...do stuff...
        OnSomeEvent();
        //...do more stuff...
    }
}

public class SomeSubclass : SomeBaseClassWithAnEvent
{
    protected override void OnSomeEvent()
    {
        // custom stuff here to do it before the event
        base.OnSomeEvent();
        // or here to do it after the event
    }
}

这种模式允许两件事:

  • 子类可以通过调用On...方法
  • 来调用事件
  • 子类可以通过覆盖 On...方法拦截事件以添加功能

如果你想看看这种模式是根深蒂固的 - 只要进入你正在使用的任何框架(winforms,wpf,asp.net,asp.net mvc,你能想到的任何其他东西),只需输入{{1然后向下滚动到override

enter image description here

(提示......滚动条在On范围内相当长一段时间