たとえば、ボタンリスナーのように、一部の関数が接頭辞として "on"を使用する場合があります。
onButtonPressed();
そして他の例があります:
onStateChanged();
onNotified();
onResume();
接頭辞「オン」は、その背後に暗黙の意味上の意味がありますか?
接頭辞「on」は、メソッドがコールバックとして使用されることを意図していることを示すために最も頻繁に使用されます。つまり、直接呼び出されるのではなく、何らかのイベントのハンドラーとして設定されます。
たとえば、onClick
という名前のメソッドを記述する場合、おそらく直接呼び出すことはありませんが、ユーザーがボタンをクリックすると、GUIツールキットがそれを呼び出すことを期待します。
編集済み@MetaFightでのコメントでの会話の後に私の回答を修飾して拡張します
イベントで見たほとんどすべての言語(JavaScript、ActionScript2/3)では、on
接頭辞を使用して、イベントハンドラープロシージャとemit
、fire
、またはraise
接頭辞は、イベントを誘発するメソッドで使用されます。 (On
は、onclick
HTML属性などのように、コールバックの添付を示すプロパティ名でも使用される場合があります。)
一方、C#は、この慣例を多少破っているようです。
基本クラスのメソッドでOn
接頭辞を使用すると、実際にはイベントが発生します。
public class Base
{
public delegate void OpeningEventHandler(Object sender, EventArgs e);
public event OpeningEventHandler Opening = delegate {};
protected virtual void OnOpening(EventArgs e)
{
Opening(this, e);
}
}
このメソッドが派生クラスでオーバーライドされると、オーバーライドはイベントをhandleすることになり、基本実装も呼び出します。
public class Derived : Base
{
protected override void OnOpening(EventArgs e)
{
// handle event here
base.OnOpening(e);
}
}
これはおそらく、派生クラスがイベントの伝搬をキャンセルできるようにするために使用されます(基本メソッドを呼び出さないことによって)。
Form.Onload
メソッドのMSDNドキュメント から:
備考
...
OnLoadメソッドを使用すると、デリゲートをアタッチせずに、派生クラスでイベントを処理することもできます。これは、派生クラスでイベントを処理するための推奨手法です。
継承者へのメモ:
派生クラスでOnLoadをオーバーライドする場合は、登録されているデリゲートがイベントを受け取ることができるように、基本クラスのOnLoadメソッドを呼び出してください。
SOに関連する質問 があります。
これは、前置詞として使用される英語の単語「on」の多くの意味の1つにすぎません。アクションがいつ発生するかを示します。そのため、ボタンが押されたときにonButtonPressed()
が呼び出されます。
関数の名前はwhenButtonPressed()
に変更できますが、これは長く、慣用的ではありません
「OnXXX」は通常、イベントを伴うものですが、プラットフォームごとに異なる命名規則があるため、正確な役割は言語によって異なり、混乱を招く可能性があります。
.net UIクラスでは、「On
」という接頭辞が付いたメソッド名は原因イベントが発生するメソッドです。たとえば、Button.OnClick()
はClick
- eventを発生させるメソッドです。 OnXXX
メソッドは保護されているため、イベントを発生させることができるのはオブジェクト自体だけです。このパターンは、Webフォーム、Windowsフォーム、WPFの両方に当てはまります。
しかし、asp.net Webコントロールマークアップでは、OnXXX
という名前の属性は、イベントのイベントハンドラーregistersであるため、意味が異なります。例えば。 _OnClick="Btn1_Click"
_は、メソッド_Btn1_Click
_をClickイベントのハンドラーとして登録します。つまり、WebコントロールのOnClick
属性はnotがOnClick
メソッドに直接対応します。むしろそれはコード_Click += Btn1_Click
_に対応します。正直なところ、これはやや混乱します。XAMLマークアップでは規約が変更されているため、イベントをアタッチする属性の名前には「On」プレフィックスがありませんが、イベントの名前と直接一致します。例:_Click="Btn1_Click"
_。
JavaScriptでは、規則が異なります。ここでonXXX
はイベントの名前handlerです。例えば。 _button.onclick
_は、クリックイベントが発生したときに呼び出されるメソッドです(.netのようにイベントを発生させるメソッドではありません)。 HTMLのイベントハンドラー属性もonXXXという名前で、イベントハンドラーをアタッチします。 onclick="handleClick()"
は、click
イベントのハンドラーを登録します(Asp.netの場合と同様)。