2010-10-15 12 views
0

У меня есть абстрактный класс, который реализует 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, даже несмотря на то, что отображается его ошибка.

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

Thanks

+0

просто нужно отметить, что методы интерфейса абстрактны в вашем абстрактном классе. – 2010-10-15 05:14:01

ответ

7

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

public abstract void MyMethodDeclaredInTheInterface(); 

EDIT: Для того, чтобы ускорить процесс, просто переместите курсор на имя интерфейса в вашем абстрактном классе, а затем Ctrl +. и выберите «Использовать интерфейс YourInterface». Затем небольшой поиск и замена над NotImplementedException должны сделать трюк.

+0

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

+1

Я обновил свой ответ соответственно –

+1

@ Rajesh Rolen: Если у вас есть 244 функции в одном типе, возможно, вам стоит подумать разделяя это на несколько типов. См. SRP http://en.wikipedia.org/wiki/Single_responsibility_principle –

1

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

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

0

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

0

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

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