Возможный дубликат:
Интерфейс vs Базовый класс
Его общий вид, чтобы увидеть шаблон хранилища, реализованный с использованием интерфейсов
public interface IFooRepository
{
Foo GetFoo(int ID);
}
public class SQLFooRepository : IFooRepository
{
// Call DB and get a foo
public Foo GetFoo(int ID) {}
}
public class TestFooRepository : IFooRepository
{
// Get foo from in-memory store for testing
public Foo GetFoo(int ID) {}
}
Но вы также можете сделать это с помощью абстрактных классов.
public abstract class FooRepositoryBase
{
public abstract Foo GetFoo(int ID);
}
public class SQLFooRepository : FooRepositoryBase
{
// Call DB and get a foo
public override Foo GetFoo(int ID); {}
}
public class TestFooRepository : FooRepositoryBase
{
// Get foo from in-memory store for testing
public override Foo GetFoo(int ID); {}
}
Каковы конкретные преимущества использования интерфейса над абстрактным классом в сценарии репозитория?
(т.е. не просто скажите мне, что вы можете реализовать несколько интерфейсов, я это уже знаю - зачем вы это делаете в реализации репозитория)
Изменить, чтобы уточнить - такие страницы, как " MSDN - Выбор между классами и интерфейсами" можно перефразировать как "Выбирайте классы по интерфейсам, если нет веской причины не" - какие веские причины в конкретном случае шаблона репозитория