2011-04-06 183 views
2

我正在嘗試構建另一個人的C#項目。 在很多的界面我得到的錯誤:C#修飾符'abstract'對此項無效

The modifier 'abstract' is not valid for this item 

在以下接口:

namespace Services.Email 
{ 
    using System; 
    using System.Collections; 
    using.System.Collections.Generic; 
    using System.Runtime.CompilerServices; 

    public interface IEmailService 
    { 
     abstract event EventHandler<SendCompletedEventArgs> SendSummaryCompleted; 

     void SendNewsItem(DocumentNewsItem newsItem, string email); 
     void SendSummaryAsync(Session session, Advisor advisor); 
    } 
} 
+3

考慮替換另一個人。沒有理由提交不能編譯的代碼。 – SLaks 2011-04-06 13:29:26

回答

15

只是刪除abstract,它並不適用於接口。界面中的所有東西本質上都是「抽象的」。抽象類實際上在許多方面與具有未實現的必需接口的類相同。

+0

+1 - 最好有一個或另一個取決於您的應用程序的設計,從來都沒有!# – 2011-04-06 13:28:03

+0

+1爲解釋*爲什麼*這是不允許的。 – 2011-04-06 13:31:01

+0

我的觀點將是一個抽象類,它不僅僅像一個帶有隱式接口的普通類來實現。在我的編碼中,我從抽象類或接口中選擇抽象類或接口,這取決於類型在概念上表示的內容。例如,如果我想確保某些類可以是JSON序列化的,那麼我會選擇實現一個「IJsonSerializable」接口,而如果我希望某個基類的任何派生類能夠成爲JSON -serializable,我寧願阻止一個「JsonSerializableObject」抽象類。 – 2011-04-06 13:35:39

1

接口都不允許包含像abstractvirtualpublicprotectedprivate,...
解決方案修飾符:
只是將其刪除。

0

確實無效。刪除抽象關鍵字並重新編譯。

1

在.NET和C#中,不支持接口中的成員修飾符。

如果你想要這樣的事情,你最好將它們切換到抽象類,但恕我直言,這不是一個開發軟件的好方法(重構代碼而不考慮實際要求)。

簡單的解決方案:只需刪除任何類型的接口成員的任何修飾符,類型,標識符和參數。

2

請參閱此MSDN文章:http://msdn.microsoft.com/en-us/library/aa664580%28v=vs.71%29.aspx

所有接口成員隱含有公共訪問。接口成員聲明包含任何修飾符都是編譯時錯誤。特別是,接口成員不能用修飾符abstract,public,protected,internal,private,virtual,override或static聲明。

解決方案:刪除「抽象」修飾符