2011-04-06 3 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

答えて

15

だけabstractを削除し、それがインターフェイスには適用されません。インタフェース内のすべては、本質的に「本質的に」抽象的なものです。抽象クラスは実際には実装されていない必須インタフェースを持つクラスと同じように多くの点で同じです。

+0

+1 - アプリケーションの設計に応じてどちらか一方を選択することをお勧めします。両方を決して使用しないでください!# –

+0

+1理由を説明する*なぜ*これは許可されていません。 –

+0

私のポイントは抽象クラスになりますが、実装する暗黙のインターフェイスを持つ通常のクラスのようなものではありません。私のコーディングでは、抽象クラスまたはインタフェースを、概念の観点から型が表現しているものに応じて選択します。たとえば、いくつかのクラスがJSON直列化可能であることを保証したいのであれば、 "IJsonSerializable"インタフェースを実装することを選択します。一方、基本クラスの派生クラスがJSON -serializable、私は "JsonSerializableObject"抽象クラスを実装することを好むだろう。 –

1

インタフェースはabstractvirtualpublicprotectedprivate、などの修飾を含むことを許可されていません...
ソリューション:
ちょうどそれを削除します。

0

実際には無効です。抽象的なキーワードを削除し、再コンパイルしてください。

1

.NETおよびC#では、インターフェイスのメンバー修飾子はサポートされていません。

抽象クラスに切り替えるほうがいいが、IMHOはソフトウェアを開発する良い方法ではない(実際の要件を考えずにコードをリファクタリングする)。

簡単な解決策:任意の種類のインターフェイスメンバーの修飾子、タイプ、識別子、およびパラメータを削除するだけです。

2

は、このMSDNの記事を参照してください:http://msdn.microsoft.com/en-us/library/aa664580%28v=vs.71%29.aspx

すべてのインターフェイスのメンバーは、暗黙的にパブリックアクセスを持っています。インターフェイスメンバ宣言が修飾子を含むのはコンパイル時エラーです。特に、interfacesメンバーは、abstract、public、protected、internal、private、virtual、override、またはstaticの修飾子で宣言することはできません。

解決策:「抽象」修飾語を削除します。

関連する問題