Абстрагируйте все методы интерфейса, которые реализованы в абстрактном классе, даже если вы их не используете.
В этом конкретном случае требуется реализация иерархии из 2 или более абстрактных классов с интерфейсом.
Я также пытался реализовать иерархию в C #.Мне нужен интерфейс, но я хотел абстрактный класс, потому что большинство свойств одинаковы для интерфейса.Для этого мне нужно было создать отдельный класс Abstract с реализацией, а затем мои классы Concrete или, в моем случае, другой абстрактный класс, наследовали бы интерфейс и абстрактный класс.
Я не думаю, чтоэтот первый пример является хорошим примером по многим причинам, но мне пришлось его иметь, потому что компилятор не позволял бы FooBar реализовывать Foo, а затем имел другой абстрактный класс для наследования FooBar.Итак, у меня был абстрактный класс с абстрактным методом bar () и интерфейс с методом bar ().
public interface Foo {
bool bar();
//other stuffs
}
public abstract class FooBar {
public abstract bool bar();
//Other stuffs
}
public abstract class FooBarAbstraction: FooBar, Foo {
//other stuffs
//Don't supply the interface and abstract here
}
public class FooBarConcrete: FooBarAbstraction {
public override bool bar() {
return true;
}
//other stuffs
}
Это была моя первая попытка, потом мне стало любопытно и я начал думать об этом.Я сталкивался с этим решением.Лучшее решение.
public interface Foo {
bool bar();
bool buzz();
//other stuffs
}
public abstract class FooBar : Foo{
public abstract bool bar();
public abstract bool buzz();
//Other stuffs
}
public abstract class FooBarAbstraction: FooBar {
//other stuffs
//Don't supply the interface and abstract here
// override everything else
public override bool buzz() {
return false;
}
}
public class FooBarConcrete: FooBarAbstraction {
public override bool bar() {
return true;
}
//other stuffs
}