質問

毎時から深部にC#のプロジェクトを通して、自終わる多くのイベント"って本当に合格する必要があり、単一商品です。こだわる EventHandler/EventArgs でも私のようになって違いますので、以下のようなもの:

public delegate void EventHandler<T>(object src, EventArgs<T> args);

public class EventArgs<T>: EventArgs {

  private T item;

  public EventArgs(T item) {
    this.item = item;
  }

  public T Item {
    get { return item; }
  }
}

その後、そういう

public event EventHandler<Foo> FooChanged;

public event EventHandler<Bar> BarChanged;

しかし、この標準です。純した新しい委員 EventArgs サブクラスのための各種イベントです。い何かがあるのは間違った自分の一般アプローチを考えていますか。


編集:その後は再作成されたこの新しいプロジェクトを確認しポーツをお楽しみいただけます。実は、私は再作成していを掲載しました。私が存在することが分かった。汎用 EventHandler<TEventArgs>,は必要ありませんが、一般委譲が必要だが、一般 EventArgs<T> クラスで TEventArgs: EventArgs.
別の編集:一つには下振れ(me)の内蔵ソリューションには、エレベル:

public event EventHandler<EventArgs<Foo>> FooChanged;

public event EventHandler<Foo> FooChanged;

である、世界に向けて発信するお客様登録のためのイベントが、システムの名前空間は輸入デフォルトでは、なんと手を求めのお名前空間でも、好きのように簡単に、ios、androidとmac用にc#...誰でもそのアイデアに関す。

役に立ちましたか?

解決

委譲は、以下のフォームを追加しました。NET Framework2.0

public delegate void EventHandler<TArgs>(object sender, TArgs args) where TArgs : EventArgs

いアプローチなどを水でよく練りあわせのさらなるビットで提供さout-of-the-box実装EventArgsシングルデータアイテムが欠けてい数特性のオリジナルのデザイン:

  1. を追加することはできません。性のイベントを変更することなくデータ依存のコードです。また変更をdelegateに署名を提供するデータのイベントのご契約者.
  2. お客様のデータオブジェクトで汎用的でもある"アノニマス"を読みながらコードまでの理解につながる"アイテム"から物件ました.この名前によるデータで提供。
  3. 用のジェネリック医薬品このようにすることができず並列階層EventArgsる場合、階層の基底(商品)タイプです。E.g.EventArgs<BaseType> は基底タイプのためのEventArgs<DerivedType>場合でも、BaseTypeは拠点DerivedType.

いかというより利用汎用EventHandler<T>が、まだまだカスタムEventArgsクラス主催のご要望に合わせて、データモデルです。Visual Studioおよび拡張子のように簡単に、ios、androidとmac用にc#のみであり、問題の少ないコマンドをクラスというのに。

他のヒント

への一般イベントの宣言や、作成したカップルのコードの抜粋です。使用してい:

  • コピーのスニペット.
  • ペーストでテキストファイル(例えば、メモ帳).
  • ファイルを保存します。スニペットします。
  • けます。スニペットのファイルに適切なスニペットディレクトリなどの

Visual Studio2008\コードスニペット\Visual C#\自分のコードスニペット

ここで一つを使用したカスタムEventArgsクラス物件:

<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippets  xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
    <CodeSnippet Format="1.0.0">
        <Header>
            <Title>Generic event with one type/argument.</Title>
            <Shortcut>ev1Generic</Shortcut>
            <Description>Code snippet for event handler and On method</Description>
            <Author>Kyralessa</Author>
            <SnippetTypes>
                <SnippetType>Expansion</SnippetType>
            </SnippetTypes>
        </Header>
        <Snippet>
            <Declarations>
        <Literal>
          <ID>type</ID>
          <ToolTip>Type of the property in the EventArgs subclass.</ToolTip>
          <Default>propertyType</Default>
        </Literal>
        <Literal>
          <ID>argName</ID>
          <ToolTip>Name of the argument in the EventArgs subclass constructor.</ToolTip>
          <Default>propertyName</Default>
        </Literal>
        <Literal>
          <ID>propertyName</ID>
          <ToolTip>Name of the property in the EventArgs subclass.</ToolTip>
          <Default>PropertyName</Default>
        </Literal>
        <Literal>
          <ID>eventName</ID>
          <ToolTip>Name of the event</ToolTip>
          <Default>NameOfEvent</Default>
        </Literal>
            </Declarations>
      <Code Language="CSharp"><![CDATA[public class $eventName$EventArgs : System.EventArgs
      {
        public $eventName$EventArgs($type$ $argName$)
        {
          this.$propertyName$ = $argName$;
        }

        public $type$ $propertyName$ { get; private set; }
      }

      public event EventHandler<$eventName$EventArgs> $eventName$;
            protected virtual void On$eventName$($eventName$EventArgs e)
            {
                var handler = $eventName$;
                if (handler != null)
                    handler(this, e);
            }]]>
      </Code>
        </Snippet>
    </CodeSnippet>
</CodeSnippets>

この一つ、特性:

<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippets  xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
  <CodeSnippet Format="1.0.0">
    <Header>
      <Title>Generic event with two types/arguments.</Title>
      <Shortcut>ev2Generic</Shortcut>
      <Description>Code snippet for event handler and On method</Description>
      <Author>Kyralessa</Author>
      <SnippetTypes>
        <SnippetType>Expansion</SnippetType>
      </SnippetTypes>
    </Header>
    <Snippet>
      <Declarations>
        <Literal>
          <ID>type1</ID>
          <ToolTip>Type of the first property in the EventArgs subclass.</ToolTip>
          <Default>propertyType1</Default>
        </Literal>
        <Literal>
          <ID>arg1Name</ID>
          <ToolTip>Name of the first argument in the EventArgs subclass constructor.</ToolTip>
          <Default>property1Name</Default>
        </Literal>
        <Literal>
          <ID>property1Name</ID>
          <ToolTip>Name of the first property in the EventArgs subclass.</ToolTip>
          <Default>Property1Name</Default>
        </Literal>
        <Literal>
          <ID>type2</ID>
          <ToolTip>Type of the second property in the EventArgs subclass.</ToolTip>
          <Default>propertyType1</Default>
        </Literal>
        <Literal>
          <ID>arg2Name</ID>
          <ToolTip>Name of the second argument in the EventArgs subclass constructor.</ToolTip>
          <Default>property1Name</Default>
        </Literal>
        <Literal>
          <ID>property2Name</ID>
          <ToolTip>Name of the second property in the EventArgs subclass.</ToolTip>
          <Default>Property2Name</Default>
        </Literal>
        <Literal>
          <ID>eventName</ID>
          <ToolTip>Name of the event</ToolTip>
          <Default>NameOfEvent</Default>
        </Literal>
      </Declarations>
      <Code Language="CSharp">
        <![CDATA[public class $eventName$EventArgs : System.EventArgs
      {
        public $eventName$EventArgs($type1$ $arg1Name$, $type2$ $arg2Name$)
        {
          this.$property1Name$ = $arg1Name$;
          this.$property2Name$ = $arg2Name$;
        }

        public $type1$ $property1Name$ { get; private set; }
        public $type2$ $property2Name$ { get; private set; }
      }

      public event EventHandler<$eventName$EventArgs> $eventName$;
            protected virtual void On$eventName$($eventName$EventArgs e)
            {
                var handler = $eventName$;
                if (handler != null)
                    handler(this, e);
            }]]>
      </Code>
    </Snippet>
  </CodeSnippet>
</CodeSnippets>

ることができるようにパターンの作成として多くの物件です。

ないと思うことは間違いです。と思うのでおすすめ【幻想】 枠組みの設計ガイドライン.私も同じです。

これは、正しい実装されます。に追加されている。NETフレームワーク(mscorlib)からジェネリック医薬品になったのをご用意(2.0)に変更しました。

詳し、その使用及び実施を見MSDN: http://msdn.microsoft.com/en-us/library/db0etb8x.aspx

初めて目にしたこの小さなパターンを利用した 複合UIアプリケーションブロック, からMSパターン&慣行。

なに捨てる赤いフラグme;ついてもスマートな方法を活用ジェネリック医薬品の ドライ います。

ました。純2.0

EventHandler<T>

が実施されました。

で汎用のEventHandlerにMSDN http://msdn.microsoft.com/en-us/library/db0etb8x.aspx

ついての一般EventHandler広くすることができたの防止にはいわゆる"爆発タイプ(クラス)" プロジェクトは保たれていた小さめやすいナビゲートします。

新たな直感的な委譲のための非薬EventHandler委譲は痛みと重なり、既存の種類 追加"*EventHandler"新たな代名のない私の意見

と思っているのは、最近のバージョンです。純てどうやればいいのでしょうかイベントハンドラを定義します。それは大きなクしています。

/編集

なの区別はありますようになりました。もし、通過後クラスを継承EventArgs、まきというものはないと思います。皆される場合なラッピングresultfor保守性ます。まだまだと言うに見えています。

利用汎用イベントハンドラのインスタンス

ます。NET Framework2.0のため、パスカスタム情報のイベントハンドラは、新しい委譲すると宣言して指定したクラスからシステム。EventArgsクラスです。これがもはや真ではないのである。当期純

Framework2.0には、システムを導入しています。EventHandler<T>)に限ります。この汎用的な委譲可能なクラスからEventArgsにおいて、使用されるイベントハンドラです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top