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

Интерфейсы не могут содержать модификаторы, как abstract, virtual, public, protected, private ...
Решение:
Просто удалите его.

0

Это действительно недействительно. Удалите ключевое слово abstract и повторно скомпилируйте.

1

В .NET и C# модификаторы-члены в интерфейсах не поддерживаются.

Если вам нужна такая вещь, вам лучше переключить их на абстрактные классы, но IMHO это не лучший способ разработки программного обеспечения (рефакторинг кода без размышлений о том, что является фактическим требованием).

Простое решение: просто удалите модификатор, оставьте тип, идентификатор и параметры любого элемента интерфейса.

2

Обратитесь к этой статье MSDN: http://msdn.microsoft.com/en-us/library/aa664580%28v=vs.71%29.aspx

Все члены интерфейса неявно имеют открытый доступ. Это ошибка времени компиляции для объявлений участников интерфейса, которые включают в себя любые модификаторы. В частности, члены интерфейсов не могут быть объявлены с помощью модификаторов abstract, public, protected, internal, private, virtual, override или static.

Решение: удалить «абстрактный» модификатор

Смежные вопросы