Абстрактные типы и интерфейсы
Обновлен: Ноябрь 2007
Абстрактные типы и интерфейсы являются механизмами для описания программных абстракций. Абстракция описывает контракт, которого должны придерживаться производные классы и реализации класса. Для абстрактных типов имеется возможность предоставления деталей реализации; интерфейсы не могут предоставлять детали реализации.
Не предоставляйте абстракции для использования, пока не проверите их путем разработки нескольких конкретных реализаций и API, которые используют эту абстракцию.
Если вы предоставите абстракции, не проверив их в сценариях реального окружения, существует большая вероятность пропуска ошибок проектирования, которые сложно или невозможно исправить без решения проблем совместимости в будущих версиях.
При проектировании абстракции тщательно выбирайте между абстрактным классом и интерфейсом.
Подробные рекомендации относительно выбора между абстрактным типом и интерфейсом см. Выбор между классами и интерфейсами.
Продумайте тесты конкретных реализаций абстракций. Такие тесты позволят пользователям проверить правильность своих реализаций.
Кроме того, эти тесты позволят вам самостоятельно проверить правильность реализации интерфейса. Например, тест для ICollection<T> поможет проверить, что после двух вызовов метода Add в случае реализации интерфейса, значение свойства Count увеличивается на два.
Охраняется авторским правом Copyright 2005 Microsoft Corporation. Все права защищены.
Охраняется авторским правом Copyright Addison-Wesley Corporation. Все права защищены.
Дополнительные сведения о руководствах по разработке см. в книге "Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries", Krzysztof Cwalina and Brad Abrams, Addison-Wesley, 2005.