Ответ 1
Нет особой причины, почему этот заказ был выбран. Выбранный порядок идет от более общего к более конкретному, что, я полагаю, является достаточно приятным свойством.
Что касается вопроса "зачем вообще требовать заказ?", проще, чтобы команды по внедрению и тестированию имели четкий, недвусмысленный порядок, налагаемый языком. Мы могли бы позволить ограничениям прийти в любом порядке, но что это нас покупает?
Чем дольше я работаю на языках, тем больше я придерживаюсь мнения, что каждый раз, когда вы предоставляете пользователю выбор, вы даете им возможность сделать плохой выбор. Основной принцип проектирования С# заключается в том, что мы говорим вам, когда все выглядит неправильно и заставляет вас сделать их правильными - что не является основным принципом дизайна, скажем, JavaScript. Его основной принцип проектирования - "путаться и пытаться делать то, что имел в виду пользователь". Поместив больше ограничений на то, что является правильным синтаксисом в С#, мы можем лучше убедиться, что предполагаемая семантика хорошо выражена в программе.
Например, если бы я разрабатывал С# -пользовательский язык сегодня, у меня не было бы двусмысленных синтаксисов, например:
class C : X , Y
или
... where T : X, Y
Y явно предназначен для интерфейса. Является X? Мы не можем сказать синтаксически, должен ли X быть интерфейсом или классом. Достаточно сказать, что эта двусмысленность значительно усложняет такие вещи, как обнаружение циклов в базовых типах с интерфейсами и т.д. Было бы намного проще, если бы это было более подробно, как в VB.