4

私はこれをしばらくの間疑問に思っていました。しかし、ここ数週間はフロントエンドの開発に重点を置いてきたので、特にそうです。幅広い質問のように聞こえるかもしれませんが、うまくいけば、答え、または次のような理由があります。

.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!
}

比較的小さな変更だとは思いますが、確かにもっとエレガントですか?:)

4

1 に答える 1

5

古いから。

Webコントロールは.NET1.0用に開発されており、ジェネリックは.NET2.0まで登場しませんでした。

もちろん、コントロールを変更することもできますが、それは、コンパイルするためにすべての古いコードを変更する必要があることを意味します(そして、古いバイナリが機能しなくなるため、それらを再コンパイルする必要があります)。 Webページ)は廃止されます。

于 2012-05-29T11:04:49.057 に答える