Краткий ответ: это упущение в компиляторе.
Более длинный ответ: эвристика, которая определяет, какие предупреждения выдавать членам и местным жителям, которые объявлены и никогда не используются, или пишутся и никогда не читаются, или читаются и никогда не пишутся, не принимают доступность только для чтения поля во внимание. Как вы правильно заметили, он может и тем самым выдавать предупреждения в большем количестве случаев. Можно сказать, что общедоступное поле только для чтения, которое не инициализируется ни в одном ctor, «всегда будет иметь значение по умолчанию», например.
Я упомяну об этом Нилу в новом году, и мы посмотрим, сможем ли мы улучшить эту эвристику в Рослине.
Между прочим, существует ряд ситуаций, в которых может быть выдано предупреждение такого рода (независимо от того, доступно ли только чтение), но мы этого не делаем. Я не нахожусь в моем офисе сегодня, поэтому у меня нет списка всех этих ситуаций под рукой, но достаточно сказать, что их много. Это было что-то вроде «поле объявлено как общедоступное и находится в публичном вложенном классе внутреннего класса». В этой ситуации поле эффективно является внутренним, и мы можем сделать предупреждение, но иногда мы этого не делаем.
Однажды много лет назад я изменил эвристику так, чтобы каждое поле , которое, как известно, было статически известно как неиспользуемое, выдало предупреждение, и когда это изменение превратило его во внутреннюю версию компилятора C #, мы использовать для компиляции библиотек классов, написанных на C #, весь ад вырвался на свободу. Эти парни всегда компилируют с включенными «предупреждениями как ошибками», и внезапно они начинают получать предупреждения по всем видам полей, которые были преднамеренно инициализированы или использованы только посредством отражения, и другими динамическими методами. Я сломал сборку главным образом. Теперь можно утверждать, что, эй, эти парни должны исправить свой код так, чтобы он подавлял предупреждение (и я это утверждал), но в конечном итоге оказалось проще вернуть эвристику предупреждения на прежний уровень. Я должен был сделать изменения более постепенно.