Ну либо реализуйте интерфейсный метод в абстрактном классе, либо просто объявите метод как абстрактный. В чем проблема?
Планировал создать интерфейс для клиентов, а также абстрактный класс, в котором реализуются базовый функционалитет.
Вот набросок:
interface IBar
{
void foo();
}
abstract class BaseBar : IBar
{
protected void fooImpl() { }
}
class ConcreteBar : BaseBar
{
virtual public void foo() { }
}
при компиляции получаю сообщение об ошибке:
error CS0535: 'TestConsoleApp.Program.BaseBar' does not implement interface member 'TestConsoleApp.Program.IBar.foo()'
Хотя в МСДН указанно:
A class derived from an interface, but the class did not implement one or more of the interface's members. A class must implement all members of interfaces from which it derives or else be declared abstract
BaseBar то как раз абстрактный, что же я не так делаю?
Спасибо
Здравствуйте, MozgC, Вы писали:
MC>Ну либо реализуйте интерфейсный метод в абстрактном классе, либо просто объявите метод как абстрактный. В чем проблема?
Ясно. Просто писал до этого на плюсах, и там не было необходимости обьявлять в абстрактном классе не реализуемый метод. Но там правда и понятия интерфеса нет как такового.
Кстати если сделать IBar не интерфейсом, а абстрактным классом(как в плюсах):
abstract class IBar
{
public abstract void foo();
}
abstract class BaseBar : IBar
{
protected void foo2dd() { }
}
class ConcreteBar : BaseBar
{
public override void foo()
{
foo2dd();
}
}
То всё идентично. Просто в голове крепко засело, что интерфейс это аналог класса, у которого все методы абстрактные.
Спасибо.
Попробуйте так:
abstract class BaseBar : IBar
{
public virtual void foo(){}
}
Здравствуйте, Angler, Вы писали:
A>Хотя в МСДН указанно:
A>A>A class derived from an interface, but the class did not implement one or more of the interface's members. A class must implement all members of interfaces from which it derives or else be declared abstract
Дык так и сказано — если класс абстрактный можно не ИМПЛЕМЕНТИРОВАТЬ член интерфейса. Однако совершенно не сказано, что можно заодно его и не декларировать.