В Oracle что-то вроде этого работает приятно для разделения подсчета и упорядочивания немного лучше. Я не уверен, будет ли это работать в MySql 4.
select 'Tag', counts.cnt
from
(
select count(*) as cnt, 'Tag'
from 'images-tags'
group by 'tag'
) counts
order by counts.cnt desc
Совершенно верно. Вы должны отдать предпочтение защищенному конструктору.
РЕДАКТИРОВАТЬ: нет, компилятор не жалуется, но такие инструменты, как FxCop (и анализ кода), жалуются. Я считаю, что есть некоторые странные уловки отражения, которые вы можете использовать с общедоступными конструкторами в абстрактных классах, но с точки зрения, когда вы просто предоставляете функциональность базового класса другим разработчикам, пишущим подклассы, придерживайтесь защищенного конструктора.
Вы правы. Открытый конструктор в абстрактном классе функционально эквивалентен защищенному конструктору.
Я предпочитаю использовать в этом случае защищенный конструктор.
Хотя компилятор действительно не будет жаловаться на то, что вы делаете это, компилятор будет жаловаться на попытку создать экземпляр абстрактного класса. Visual Studio также достаточно умен, чтобы не предоставлять Intellisense, если вы пытаетесь создать экземпляр абстрактного класса.
Да, вы правы, практически открытый конструктор не используется в классе abscract, поскольку вы не можете их создать.
Однако компилятор не будет жаловаться, потому что таким образом можно написать так много бесполезных вещей в контексте C #, но он не сможет проверить его логическое значение, он может только проверить правила синтаксического анализа, для которых он установлен.
И некоторые создатели C # сосредоточились на создании грамматики (правил) компиляции, которые действительно вредны и нарушают использование языка.