2013-03-11 21 views
5

Tôi có một giao diện mà tuyên bố sự kiệnMã quy tắc phân tích CA1040: Tránh giao diện rỗng, phàn nàn trên một giao diện không có sản phẩm nào

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

nhưng khi tôi cho phép Bộ luật quy tắc phân tích CA1040: Tránh giao diện trống, nó than phiền giao diện của tôi vi phạm quy tắc này, bất kỳ ý tưởng nào để giải quyết nó?

+5

Chỉ cần chặn cảnh báo? Nó rõ ràng là giả mạo. –

+0

Tôi thích chỉ áp dụng khi tôi có lý do thực sự, trong trường hợp này, nguyên nhân sẽ là quy tắc không hoạt động đúng cách –

+0

Lạ nếu nó coi giao diện bị trống. Khai báo 'event' là một yêu cầu mà lớp thực thi/struct phải có en' event' với kiểu đó ('SomeHandler') chứa cả hai' access' và 'remove' accessors. Hai người truy cập có thể "ẩn" nếu người triển khai chọn sử dụng "sự kiện giống như trường". Nó chỉ làm việc với các chỉ mục, tức là nếu thành viên duy nhất của 'IMyInterface' là' string this [int idx] {get; } '? –

Trả lời

2

Lý do tại sao nó than phiền, là bởi vì giao diện này không đòi hỏi bất kỳ implamentation. Bạn không thể triển khai khai báo sự kiện theo bất kỳ cách cụ thể nào.

Như Matthew gợi ý, hãy tắt nó đi. bạn có thể cần phải thêm thông tin này vào đầu lớp học của mình:

#define CODE_ANALYSIS 

hoặc suppresion bị bỏ qua.

Sửa

Nó có thể là một lỗi sau khi tất cả, như bất kỳ lớp kế thừa giao diện là infact requeried để "thực hiện" nó - vì thế: nó là không một giao diện trống.

+2

Bạn nói "giao diện này không yêu cầu bất kỳ sự vi phạm nào" - nhưng 'lớp Foo: IMyInterface {}' không biên dịch được! – AakashM

+0

tuche - có. đó là phần nào đáng ngạc nhiên vì chỉ có thể thực hiện một trong những sự kiện đó. chỉnh sửa câu trả lời của tôi. –

+0

Không chỉ một sự thực hiện của các sự kiện: có thể là 'event SomeHandler MyEvent1;', hoặc 'event SomeHandler Event1 {add {...} remove {...}}'. –