2013-03-11 10 views
5

ich eine Schnittstelle haben, die Ereignisse-Code-Analyse-Regel CA1040: Vermeiden Sie leere Schnittstellen, beschwert sich über eine nicht leere Schnittstelle

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

erklärt aber, wenn ich den Code Analyseregel CA1040 ermöglichen: Vermeiden Sie leere Schnittstellen, es klagt dass meine Schnittstelle diese Regel verletzt, irgendwelche Ideen, wie man es löst?

+5

Nur die Warnung unterdrücken? Es ist eindeutig falsch. –

+0

Ich ziehe es vor, nur zu unterdrücken, wenn ich einen echten Grund habe, in diesem Fall wäre der Grund, dass die Regel nicht richtig funktioniert –

+0

Seltsam, wenn es die Schnittstelle als leer betrachtet. Die 'Event' Deklaration ist eine Voraussetzung, dass die implementierende Klasse/Struktur ein' Ereignis' mit diesem Typ ('SomeHandler') haben muss, das sowohl' add' als auch 'remove' enthält. Die beiden Accessoren können "implizit" sein, wenn der Implementierer ein "field-like event" verwendet. Funktioniert es nur mit Indexern, d. H. Wenn das einzige Mitglied von 'IMyInterface'' string this [int idx] {get; } '? –

Antwort

2

Der Grund, warum es beklagt, ist, weil diese Schnittstelle keine implamentation erfordert. Sie können eine Ereignisdeklaration nicht auf eine bestimmte Weise implementieren.

Wie Matthew vorschlagen, unterdrücken Sie es einfach. Möglicherweise müssen Sie dies an der Spitze Ihrer Klasse hinzufügen:

#define CODE_ANALYSIS 

oder die Unterdrückung wird ignoriert.

bearbeiten

Es könnte schließlich einen Fehler sein, wie alle Klassen, die die Schnittstelle infact erneut abgefragt zu „implementieren“ es erben - daher: es ist nicht eine leere Schnittstelle.

+2

Sie sagen "diese Schnittstelle erfordert keine Implementation" - aber "Klasse Foo: IMyInterface {}" kann nicht kompiliert werden! – AakashM

+0

tuche - es tut. das ist etwas beruhigend, da es nur eine Implementierung dieser Ereignisse geben kann. bearbeite meine Antwort. –

+0

Nicht nur eine Implementierung der Ereignisse: könnte sein: event SomeHandler MyEvent1; 'oder' event SomeHandler Event1 {add {...} remove {...}} '. –