Интерфейсы и абстрактные классы
От: Angler Россия  
Дата: 30.06.09 12:34
Оценка:
Планировал создать интерфейс для клиентов, а также абстрактный класс, в котором реализуются базовый функционалитет.
Вот набросок:

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 то как раз абстрактный, что же я не так делаю?


Спасибо
abstract class interface
Re: Интерфейсы и абстрактные классы
От: MozgC США http://nightcoder.livejournal.com
Дата: 30.06.09 12:41
Оценка: 4 (1)
Ну либо реализуйте интерфейсный метод в абстрактном классе, либо просто объявите метод как абстрактный. В чем проблема?
Re[2]: Интерфейсы и абстрактные классы
От: Angler Россия  
Дата: 30.06.09 12:53
Оценка:
Здравствуйте, 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();
            }
        }

То всё идентично. Просто в голове крепко засело, что интерфейс это аналог класса, у которого все методы абстрактные.

Спасибо.
Re: Интерфейсы и абстрактные классы
От: 18сс Россия  
Дата: 30.06.09 13:00
Оценка:
Попробуйте так:

abstract class BaseBar : IBar
    {
        public virtual void foo(){}
        
    }
Кодом людям нужно помогать!
Re[2]: Интерфейсы и абстрактные классы
От: Angler Россия  
Дата: 30.06.09 13:06
Оценка:
Здравствуйте, 18сс, Вы писали:

1>Попробуйте так:


Ну это понятно, просто не было желания определять ещё раз все методы интерфейса в базовом абстрактном классе.
Re: Интерфейсы и абстрактные классы
От: Smarty Россия  
Дата: 30.06.09 17:31
Оценка:
Здравствуйте, 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


Дык так и сказано — если класс абстрактный можно не ИМПЛЕМЕНТИРОВАТЬ член интерфейса. Однако совершенно не сказано, что можно заодно его и не декларировать.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.