Liskov Substition и состав

Вы можете использовать UNION

SELECT COUNT(*) FROM table1
UNION
SELECT COUNT(*) FROM table1 where condition;
UNION
SELECT COUNT(*) FROM table2;
UNION
SELECT COUNT(*) FROM table3 where condition;

. Вы можете добавить дополнительное поле, чтобы найти, какую строку вы получите, следуя запросу

SELECT "COND-1" AS TITLE, COUNT(*) FROM table1
UNION
SELECT "COND-2" AS TITLE, COUNT(*) FROM table1 where condition;
UNION
SELECT "COND-3" AS TITLE, COUNT(*) FROM table2;
UNION
SELECT "COND-4" AS TITLE, COUNT(*) FROM table3 where condition;
.
9
задан Georg Fritzsche 21 May 2010 в 23:19
поделиться

2 ответа

Я боюсь, что короткий ответ, Вы не можете, не делая то, что требуется, т.е. передайте составленную переменную экземпляра вместо этого.

Вы могли разрешить неявный или явный бросок тому типу (чья реализация просто передала составленный экземпляр), но это будет, IMO быть довольно злым.

ответ sixlettervariable хорош, и я не перехеширую его, но если Вы указали, какие классы Вам было жаль, что Вы не могли расшириться, мы смогли говорить Вам, почему они предотвратили его.

3
ответ дан 4 December 2019 в 12:21
поделиться

Я задавал тот же самый вопрос, пока я не начал работать над допускающими повторное использование моими собственными библиотеками. Много раз Вы волнуете с определенными классами, которые просто не могут быть расширены, не требуя неясных или тайных последовательностей вызовов от конструктора.

Позволяя Вашему классу быть расширенными, необходимо спросить: если разработчик расширяет мой класс и передает этот новый класс моей библиотеке, я могу прозрачно работать с этим новым классом? Я могу работать правильно с этим новым классом? Этот новый класс действительно собирается вести себя то же?

Я нашел, что большую часть времени запечатанные классы в.Net Framework имеют определенные требования под капотом, чтобы Вы не знали, и который, учитывая текущую реализацию не может быть безопасно выставлен подклассам.

Это точно не отвечает на Ваш вопрос, но он обеспечивает понимание относительно того, почему не все классы являются наследуемыми в.Net Framework (и почему необходимо, вероятно, развлечь изоляцию некоторых классов также).

14
ответ дан 4 December 2019 в 12:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: