2016-04-20 15 views
2

私はWeakEventManagerに慣れるしようとしていますし、私は次のようにつまずく:WeakEventManagerと静的イベント



ABのみ差がstaticあるが、無視してくださいコピー/貼り付けエラーnameof;)

ジェネリック型と静的型に関してthis answerが見つかりましたが、Aとは何をしているのですか?WeakEventManager何とか静的イベントのソースとしてnullを使用することができます。

なぜstaticイベントはOKですが、static classとしてTEventSourceが突然ではないという簡単な回答を求めています。


コード:

public class A 
{ 
    public static event EventHandler Event; 
} 

public static class B 
{ 
    public static event EventHandler Event; 
} 

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     WeakEventManager<A, EventArgs>.AddHandler(null, nameof(A.Event), (s, e) => { }); 
     WeakEventManager<B, EventArgs>.AddHandler(null, nameof(B.Event), (s, e) => { }); 
    } 
} 

エラー:

object sourceKey = (source != null) ? source : StaticSource; 

sourcenullとき

Error CS0718
'B': static types cannot be used as type arguments

+2

あなたのコードを質問にテキストとして記入してください。 – Hendry

+0

通常はそうですが、なぜこの場合にコードが必要ですか?問題を再現するには?本当に?または、画像が腐ってしまう場合は? – Sinatr

+0

[C# - 静的型は型引数として使用できません]の重複している可能性があります(http://stackoverflow.com/questions/5858591/c-sharp-static-types-cannot-be-used-as-type-arguments) – Hendry

答えて

2

WeakEventManagerは、静的なイベントを扱うことができますStaticSourceは、静的イベントの特別な「イベントソース」です。
実装の詳細はWeakEventManagerです。そのため、問題ありません。

ジェネリックパラメータとしての静的型について - これは言語の制限です。具体的にはWeakEventManagerとは関係ありません。

+0

私は 'WeakEventManager'がキーとして' null'を使用し、 'static'イベントと通常イベントに対して異なった動作をすると思いました。代わりに静的イベントの 'StaticSource'インスタンスを使用して同様に動作しているようです。ありがとう。言語の制限に関して、これは単純に残念であり、 'WeakEventManager'を介してそのイベントにサブスクライブできるようにするために純粋な静的クラス(インスタンスメンバーなし)から' static'を削除する必要があります。他のポイントからは、各静的タイプの非ジェネリック・イベント・マネージャーは、さらに面倒です。 – Sinatr

+0

一般的なWeakEventManagerの主な目的は、インスタンスイベントを処理することです。事実、静的事象はむしろまれである。コードに静的イベントや静的クラスがいっぱいの場合は、回避策を策定する代わりにコードをリファクタリングする方がよい – Dennis

関連する問題