2013-03-11 5 views
5

Ho un'interfaccia che dichiara eventiCodice regola analisi CA1040: Evitare interfacce vuote, si lamenta su un'interfaccia non vuoto

interface IMyInterface 
{ 
event SomeHandler MyEvent1; 
event SomeHandler MyEvent2; 
... 
} 

ma quando ho attivare la regola di analisi codice CA1040: Evitare interfacce vuote, si lamenta che la mia interfaccia viola questa regola, qualche idea su come risolverlo?

+5

Basta sopprimere l'avviso? È chiaramente spurio. –

+0

Preferisco sopprimere solo quando ho una vera ragione, in questo caso il motivo sarebbe che la regola non funziona correttamente –

+0

Strano se considera l'interfaccia vuota. La dichiarazione 'event' è un requisito che la classe/struct di implementazione deve avere en' event' con quel tipo ('SomeHandler') che contiene entrambi gli accessors' add' e 'remove'. I due accessor possono essere "impliciti" se l'implementatore sceglie di utilizzare un "evento tipo campo". Funziona solo con gli indicizzatori, ad esempio se l'unico membro di 'IMyInterface' è' string this [int idx] {get; } '? –

risposta

2

Il motivo per cui si lamenta, è perché questa interfaccia non richiede alcuna implamentation. Non è possibile implementare una dichiarazione di evento in alcun modo specifico.

Come suggerisce Matteo, basta sopprimerlo. potrebbe essere necessario aggiungere questo nella parte superiore della classe:

#define CODE_ANALYSIS 

oppure la suppressione viene ignorata.

Modifica

Potrebbe essere un bug, dopo tutto, come tutte le classi che ereditano l'interfaccia è infatti requeried a "attuare" esso - da qui: è non un'interfaccia vuota.

+2

Si dice "questa interfaccia non richiede alcuna implosione" - ma 'classe Foo: IMyInterface {}' non riesce a compilare! – AakashM

+0

tuche - lo fa. questo è in qualche modo supplichevole in quanto vi può essere solo un'implementazione di quegli eventi. modifica la mia risposta. –

+0

Non solo un'implementazione degli eventi: potrebbe essere 'evento SomeHandler MyEvent1;', o 'event SomeHandler Event1 {add {...} remove {...}}'. –