DOBON.NET DOBON.NETプログラミング掲示板過去ログ

フォームのイベントハンドラとメソッドの位置

環境/言語:[XP,C#,.NET Framework2.0]
分類:[.NET]

2009/03/17(Tue) 22:42:51 編集(投稿者)
2009/03/17(Tue) 22:31:31 編集(投稿者)

こんばんは。
今回は動作そのものについてではないのですが、気になることがあり書き込みを行うことにしました。

私はForm.Designer.csの中ではなく、Form.csの中にイベントハンドラを記述するようにしています。しかし、Form.csの中には他にメソッドやプロパティを作っているのでイベントハンドラと同じ場所に色々なものが記述されていて見づらいのです。regionで分けて出来る限り見やすくしようと心がけているのですが、皆さんはどのようにコードを記述しているのかが気になりました。

もしよろしければ、皆さんが少し工夫をされていることなどを教えていただけると幸いです。よろしくお願いします。
■No24221に返信(サイラさんの記事)
> 私はForm.Designer.csの中ではなく、Form.csの中にイベントハンドラを記述
イベントハンドラとは、「private void Form1_Load(…)」などの事ですよね。
Visual Studio のデザイナでイベントを作ると、確かにそのように働きますね。

そもそも、.designer.cs は自動生成されるものであって、通常、開発者が
直接触るような物ではありませんから、イベントハンドラのように
ユーザーコードが必要になるものは、Form1.designer.cs ではなく、
Form1.cs の方で保持させるのが適当という事なのでしょう。


> Form.csの中には他にメソッドやプロパティを作っているので
> イベントハンドラと同じ場所に色々なものが記述されていて見づらいのです。
メソッドを記述するのは良いけれども、イベントハンドラの記述は見づらい、
ということでしょうか。

VB だと、「Handles 句」の存在もあって、コード ウィンドウ右上のドロップダウンでは、
イベントハンドラ(黄色の稲妻アイコン)とメソッド(桃色の動箱アイコン)とが
分けて表示されるのですが…C# の場合はどちらも、メソッドのアイコンになっていますね。


ただ、個人的にはあまり気にしていません。

もし、「private void Form1_Load(…)」を使いたく無いのであれば、
protected な On{EventName} メソッドをオーバーライドするとか、
コントロールのイベントなら、匿名メソッドを割り当てるとか、
さらに別の partial class に分離するとか、サイラさんが書かれたように
「#region」ブロックで分離といった方法があるかと思います。

もっとも、partial class を増やす方法は、かえって管理が面倒になりがちですが。



> 皆さんはどのようにコードを記述しているのかが気になりました。
私は『気にしない派』ですが…強いて言えば『#region 派』を利用しています。

ただしそれは、必ずしも「メソッド」とか「イベント」といった単位とは限りません。

瑣末なイベント処理群を #region で見えなくして追いやってしまい、
メイン処理となるメソッド群を、見やすい場所(先頭 or 最後)にもってくるとか、
あるいは機能単位に、関連するオーバーロードやヘルパメソッドをまとめるためなどに
「#region」を用いています。


# 回答になっていないかも。
人それぞれなので面白そうですね。 私は、

public class ClassName {

  + 内包クラス定義 (あれば)
  + コンストラクタ
  + デストラクタ
  + プロパティ (プロパティ変数 (フィールド) も含む)
  + メソッド
  + イベント

}

という 「順番」 で並べるように気をつけています。
(メソッド単位やプロパティ単位では A-Z 順であったりアクセス修飾子順)

これはあくまで順番であってこの固まりで #region ディレクティブで括っているわけではないです。
順番をつけておくだけでも、実質ブロック分けできているので扱いやすいです。

#region ディレクティブはプロパティとプロパティ変数をまとめたりするような時に使っています。

個人的には partial クラスはあまり好きではないです (極端な話、コード ジェネレータが生成するコードさえ分離して欲しくない部分があったりする)。
2009/03/18(Wed) 16:35:47 編集(投稿者)

とても参考になりました。
私は #region の使いどころやメソッドの並びで悩むことが多いのですが、お二人の書き込みを見ていると、それぞれ異なった方法でコードを見やすくしようと努力されているのがわかりました。

私は、メソッド、イベント、プロパティなどの単位で#regionを使用しており
一つの#regionが膨らみすぎたらその中でまた#regionを使っています。
これからお二人の書き込みを参考に、自分なりにコードを見やすくする努力をしていきたいと思います。
ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板