2013-03-11 21 views
5

Mam interfejs, który deklaruje wydarzeniaKod reguła analizy CA1040: Unikaj pustych interfejsy, skarży się na brak pustego interfejsu

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

ale kiedy włączyć regułę analizy kodu CA1040: unikać pustych interfejsy, narzeka że mój interfejs narusza tę zasadę, wszelkie pomysły na jej rozwiązanie?

+5

Po prostu pomiń ostrzeżenie? Jest wyraźnie fałszywy. –

+0

Wolę tłumić tylko wtedy, gdy mam prawdziwy powód, w tym przypadku powodem jest to, że reguła nie działa poprawnie –

+0

Dziwne, jeśli uzna interfejs za pusty. Deklaracja "zdarzenia" jest wymaganiem, aby klasa/struktura implementująca miała en 'event' z tym typem (' SomeHandler') zawierającą zarówno akcesory 'add', jak i' remove'. Te dwa elementy mogą być "niejawne", jeśli implementator zdecyduje się użyć "zdarzenia polowego". Czy działa tylko z indeksatorami, tzn. Jeśli jedynym członkiem 'IMyInterface' jest' string this [int idx] {get; } '? –

Odpowiedz

2

Powodem narzeka, ponieważ jest to interfejs nie wymaga żadnych implamentation. Nie można zaimplementować deklaracji zdarzenia w określony sposób.

Zgodnie z sugestią Mateusza, po prostu stłumić. być może będziesz musiał dodać to w najwyższej klasie:

#define CODE_ANALYSIS 

lub suppresion jest ignorowany.

Edit

To może być błąd, mimo wszystko, jak wszelkich klas, które dziedziczą interfejs jest rzeczywiście requeried do „wdrożenia” go - stąd: to nie pusty interfejs.

+2

Mówisz "ten interfejs nie wymaga żadnej implementacji" - ale 'class Foo: IMyInterface {}' nie kompiluje się! – AakashM

+0

tuche - to robi. to trochę zaskakujące, ponieważ tylko jedna implementacja tych wydarzeń może być. edytuj moją odpowiedź. –

+0

Nie tylko jedna implementacja zdarzeń: może to być 'zdarzenie SomeHandler MyEvent1;' lub 'event SomeHandler Event1 {add {...} remove {...}}'. –