Интерфейс заставляет абстрактный класс реализовывать свои функции - PullRequest
0 голосов
/ 15 октября 2010

У меня есть абстрактный класс, который реализует 3 интерфейса.

 public abstract class ServiceBaseCore<Entity, EntityKey> : MarshalByRefObject, IComponentService, IEntityProvider<Entity, EntityKey>
    where Entity : IEntityId<EntityKey>, new()
    where EntityKey : IEntityKey, new()
{
 // Provided functionality/body to some methods of interface
}

Проблема: я получаю ошибку, что мой абстрактный класс не обеспечивает реализацию (определение / тело) для функций интерфейса, где, как я прочитал, это «если класс абстрактный, то нет необходимости предоставлять тело всем / любые функции интерфейса его реализации ".

Примечание: код был сгенерирован codeSmith, несмотря на то, что он показывает ошибку.

скажите, пожалуйста, где я не прав и чего мне не хватает.

Спасибо

Ответы [ 4 ]

7 голосов
/ 15 октября 2010

Просто создайте некоторые абстрактные функции, и компилятор перестанет жаловаться:

public abstract void MyMethodDeclaredInTheInterface();

РЕДАКТИРОВАТЬ: Чтобы ускорить процесс, просто переместите курсор на имя интерфейса в вашем абстрактном классе, затем нажмите Ctrl +.и выберите «Реализовать интерфейс YourInterface».Затем следует выполнить небольшой поиск и заменить исключение NotImplementedException.

1 голос
/ 15 октября 2010

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

Примечание: уже поздно, и я устал, поэтому я могу ошибаться в обосновании.Но добавление абстрактных методов для методов, требуемых интерфейсами, решит проблему.

0 голосов
/ 15 октября 2010

Вы можете попробовать некоторые IDE, чтобы сэкономить большую часть вашего времени. Я точно знаю, что Eclipse может сделать это автоматически.

0 голосов
/ 15 октября 2010

Вы должны иметь возможность щелкнуть правой кнопкой мыши на имени интерфейса (около MyClass : IMyInterface), чтобы увидеть контекстное меню, а затем выбрать «Реализация интерфейса». Visual Studio создаст все необходимые методы и свойства для насыщения интерфейса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...