C#修饰符';摘要';对于此项目无效

C#修饰符';摘要';对于此项目无效,c#,.net,interface,abstract,C#,.net,Interface,Abstract,我正试图为另一个人建立一个C#项目。 在许多接口中,我都会遇到错误: 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;

我正试图为另一个人建立一个C#项目。 在许多接口中,我都会遇到错误:

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);
    }
}
namespace Services.Email
{
使用制度;
使用系统集合;
使用.System.Collections.Generic;
使用System.Runtime.CompilerServices;
公共接口IEmailService
{
抽象事件处理程序SendSummaryCompleted;
作废SendNewsItem(DocumentNewsItem newsItem,字符串电子邮件);
void SendSummaryAsync(会话,Advisor);
}
}

只需删除
摘要
,它不适用于接口。接口中的一切本质上已经是“抽象的”。抽象类实际上在许多方面与具有未实现的必需接口的类相同。

接口不允许包含诸如
抽象
虚拟
公共
受保护
私有
,…
解决方案:

只需删除它。

它确实无效。删除抽象关键字并重新编译。

In.NET和C#不支持接口中的成员修改器

如果你想要这样的东西,你最好把它们转换成抽象类,但我认为这不是开发软件的好方法(在不考虑实际需求的情况下重构代码)


简单解决方案:只需删除任何修改器,保留任何类型接口成员的类型、标识符和参数。

请参阅本MSDN文章:

所有接口成员都隐式具有公共访问权限。接口成员声明包含任何修饰符是编译时错误。特别是,不能使用修饰符abstract、public、protected、internal、private、virtual、override或static声明接口成员


解决方案:删除“抽象”修饰符

+1-最好根据应用程序的设计使用其中一个或另一个,决不能同时使用两个#我的观点是,抽象类不仅仅是一个普通类,它需要实现一个隐式接口。在我的编码中,我选择抽象类或接口,这取决于类型在概念视图中所表示的内容。例如,如果我想确保某些类能够JSON序列化,我会选择实现一个“IJsonSerializable”接口,而如果我想某个基类的任何派生类都能够JSON序列化,我更愿意输入一个“JsonSerializableObject”抽象类。@Matias:您所描述的是一条经常被吹捧的规则,即接口描述has-a或can-do关系,而类描述is-a关系。这一事实定义了您为什么要使用或不使用抽象类(has-a序列化程序与is-a序列化程序)。我只是说,在实现中,抽象类和需要特定接口的常规类(尽管不存在一些符号)之间唯一的实际区别是,抽象类中的接口在基类之外是不可用的。这就是“是”。我只是在添加信息!我没有讨论这个答案,考虑换掉另一个人。没有理由交不可编译的代码。链接不再有效。我认为: