私はこれをしばらくの間疑問に思っていました。しかし、ここ数週間はフロントエンドの開発に重点を置いてきたので、特にそうです。幅広い質問のように聞こえるかもしれませんが、うまくいけば、答え、または次のような理由があります。
.NET Webコントロールイベントハンドラーが一般的でないのはなぜですか?
推論
私が尋ねる理由は、強く型付けされたイベントハンドラーの素晴らしさと優雅さによるものです。EventHandler<T>
プロジェクト全体を通して、必要に応じて、 .NET2.0以降に使用されている.NETジェネリックデリゲートを使用する傾向があります。ここで説明したように。
public delegate void EventHandler<TArgs>(object sender, TArgs args) where TArgs : EventArgs
これを拡張し、sender
同様にタイプを定義することは、比較的簡単です。
public delegate void EventHandler<TSender, TArgs>(TSender sender, TArgs args) where TArgs : EventArgs
.NETコントロールを操作するときはいつでも、ASPXファイルではなくコードビハインドでイベントハンドラーをバインドし、object
追加のチェックや変更が必要な場合は、を目的のタイプにキャストする必要がある場合があります。
既存
意味
public class Button : WebControl, IButtonControl, IPostBackEventHandler
{
public event EventHandler Click;
}
実装
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
this.MyButton.Click += new EventHandler(MyButton_Click);
}
protected void MyButton_Click(object sender, EventArgs e)
{
// type cast and do whatever we need to do...
Button myButton = sender as Button;
}
ジェネリック
意味
public class Button : WebControl, IButtonControl, IPostBackEventHandler
{
public event EventHandler<Button, EventArgs> Click;
}
実装
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
this.MyButton.Click += new EventHandler(MyButton_Click);
}
protected void MyButton_Click(Button sender, EventArgs e)
{
// no need to type cast, yay!
}
比較的小さな変更だとは思いますが、確かにもっとエレガントですか?:)