В отличие от С++, в С# нет никаких константных методов и константных параметров. В чем причина?
Почему в С# и константном параметре нет метода const member?
Ответ 1
Во-первых, нет требования, чтобы мы объяснили причину несоблюдения функции. Особенности чрезвычайно дороги; должно быть оправдание для реализации функции, а не для оправдания не реализации функции.
Во-вторых, С# не является клоном С++ или C. Просто потому, что функция на каком-то другом языке не является основанием для размещения на С#.
В-третьих, "const" глубоко, трагически нарушается на C и С++. "const" не дает вам никакой гарантии, на которую вы можете положиться. Если вы являетесь вызывающим объектом метода, который принимает ссылку на константу, то у вас нет никакой гарантии, что метод почитает константу; метод имеет множество способов мутации константной ссылки. Если вы являетесь потребителем ссылки на константу, то у вас нет гарантии, что базовый объект фактически не будет мутировать произвольно. Поскольку контракт не применяется ни к вызывающему, ни к вызываемому абоненту, он намного слабее, чем любая другая гарантия, которую мы хотели бы сделать в системе типов. Мы не хотели бы реплицировать такую разбитую систему.
В-четвертых, создание константы в системе типа CLR означает, что каждый язык должен будет использовать ту же реализацию constness; поскольку разные языки имеют разные значения для константы, что затрудняет перенос большего количества языков в CLR, а не проще.
Есть много причин не делать эту чрезвычайно дорогостоящую функцию и очень мало причин для этого. Дорогие, необоснованные функции не реализуются.
Ответ 2
У С# этого нет, потому что .NET этого не делает..NET не потому, что команда разработчиков CLR решила, что это не стоит усилий.
Вы можете читать в блогах MS, таких как Raymond Chen "The Old New Thing" или Eric Lippert "Fabulous Adventures in Coding", как Microsoft приоритизирует функции.
Ответ 3
Существует достойная статья здесь от Стэна Липпмана.