Я считаю, причина в том, что открытые типы должны использоваться из разных языков (C#, C++, JavaScript, возможно, больше в будущем).
Итак, если у вас есть класс, то одно из классов использования класса переопределяет его в новый класс. Я мог бы переопределить класс, который выполняется на другом языке. Но это проблема. Как вы хотите переопределить базовый класс, сделанный в C#, классом наследователя, выполненным на C++? Это никогда не может работать, потому что оба они имеют совершенно разные и несовместимые реализации ООП.
Заставляя открытые классы запечататься, вы устраняете эту проблему и следите за тем, чтобы люди не пытались сделать что-то подобное.
Я уверен, что есть гораздо более фундаментальные вещи, чем это, но это то, что мне пришло в голову.
Ваше название, похоже, не согласуется с вопросом? («должно быть опечатано») или «не допускается запечатывание») –