Есть интервью с C # Creator Андерсом Хейлсбергом, которое затрагивает тему здесь . По сути, именно то, что сказал @Marc Gravell: безопасность типов во-первых, безопасность посредством явного объявления.
Итак, чтобы ответить на ваш вопрос: ничто в CLR не мешает этому; Это языковая идиома, позволяющая вам работать с защитными перчатками при работе с типами. Если вы хотите снять перчатки, это ваш выбор, но вы должны сделать активный выбор, чтобы снять перчатки.
Edit:
Для уточнения: я знаю, что
«небезопасный» и «безопасный» код есть. Это просто
вопрос, почему мы должны делать все
дополнительная работа (хорошо, не слишком много)
просто чтобы иметь возможность использовать эти функции.
Как уже упоминалось в интервью, которое я связал, это было явное дизайнерское решение. C # по сути является эволюцией Java, а в Java у вас вообще нет указателей. Но дизайнеры хотели разрешить указатели; однако, поскольку C # обычно привлекал бы разработчиков Java, они чувствовали, что было бы лучше, если бы поведение default было бы аналогично Java, то есть без указателей, при этом все же позволяя использовать указатели посредством явного объявления.
Так что «дополнительная работа» является намеренной, чтобы заставить вас подумать о том, что вы делаете, прежде чем делать это. Будучи явным, он заставляет вас хотя бы подумать: «Зачем я это делаю? Нужен ли мне действительно указатель, когда будет достаточно ссылочного типа?"