Поделиться через


Абстрактные типы и интерфейсы

Обновлен: Ноябрь 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.

См. также

Другие ресурсы

Руководство по разработке библиотек классов

Разработка с обеспечением расширяемости