PG日誌

各記事はブラウザの横幅を1410px以上にすると2カラムの見出しが表示されます。なるべく横に広げてみてください。

C#の自動で作成されたイベントハンドラの命名規則

イベントハンドラを自動生成した時に、以下のメッセージで注意を受ける事があります。

IDE1006 C# 名前指定の規則違反: 最初の単語 '${メソッド名}' は、小文字で始まらなければなりません

f:id:Takachan:20180701223804p:plain

IDEが自動で作ったコードをこちらに修正しろというのもいちょっとよくわからない所ではあります。

これがC#以外の(たとえばC++やJavaだったら)名前の規則違反と言われても、元々命名規則がカオスなので特に何も感じないのですが、妙に統率の取れた感のあるC#の世界だと多少気になります。しかもVisualStudio2017だとインテリセンスの提案事項として延々と修正するように促される事になり結構煩わしいです。

この件の一般的な解決方法としてアクセス修飾子を変更する方法があります。

// 修正前
private void Button_Click(object sender, RoutedEventArgs e) { /**/ }

// 修正後:アクセス修飾子をprotected virtual に変更する
protected virtual void Button_Click(object sender, RoutedEventArgs e) { /**/ }

この方法で、IDEのインスペクションは静かになるのですが、正直、画面クラスはオーバーライドする機会がほとんどないと思います。もともと継承されることを想定しているケースが少ないのでイベントハンドラのオーバーライドをした場合、割と何もかもが動かなくなる事がありますし、どうせ数千行もあるクラスを継承する選択がないと思います。

で、じゃあどうするかというと、メソッドの頭にアンダースコアつけて誤魔化します。

// メソッドの頭にアンダースコアつけてIDEを騙す
private void _Button_Click(object sender, RoutedEventArgs e) { /**/ }

恐らく賛否両論だと思いますが、オーバーライドすることを想定しないprotected virtual指定よりはprivate + アンダースコアの方が幾分マシなのかなぁ・・・と。