В любой данный момент либо Validator не будет содержать ничего (нулевое значение), либо экземпляр некоторого типа, который реализует IValidate, который может использоваться, как если бы он был экземпляром IValidate. Чтобы использовать пример, более похожий на абстрактные классы, но относящийся к тем же принципам, рассмотрим следующие запросы:
- Если Транспортное средство паркуется в этом месте с 18:00 до 8:00, буксируйте его.
- Принеси мне новый Автомобиль .
При условии, что у каждого Транспортного средства есть метод Tow (), тип Транспортного средства в первом запросе достаточно описательный, чтобы выполнить его. С другой стороны, тип Vehicle во втором методе слишком расплывчатый, чтобы его использовать. Не обязательно было бы предоставлять абсолютно полное описание объекта, который вы хотели, если бы вы предоставили тип, который имел параметры по умолчанию. Например, если указан ToyotaCamry, этот тип может иметь связанный по умолчанию год, цвет, стиль кузова, пакет опций и т. Д. С другой стороны, просто сказать, что кто-то хочет Vehicle , будет слишком открыто. закончился.