Почему в С# и константном параметре нет метода 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

Существует достойная статья здесь от Стэна Липпмана.