Там какое-либо преимущество к созданию поля C#, только для чтения если его соответствующее?

Я работаю над использованием проекта ReSharper. При случае это предлагает мне, что поле может быть сделано только для чтения. Есть ли какая-либо производительность или другое преимущество для этого? Я предполагаю, что преимущества были бы довольно низким уровнем, или какие-либо преимущества будут чисто семантическими?

Спасибо

С примером ниже поля было первоначально просто частным, но resharper, запрошенный установить его как только для чтения. Я понимаю причину, почему она может быть установлена как только для чтения, т.е. то, что это было установленным в конструкторе и не изменена снова, но просто задающийся вопросом, существуют ли какие-либо преимущества для этого...

public class MarketsController : Controller
{
    private readonly IMarketsRepository marketsRepository;

    public AnalysisController(IMarketsRepository marketsRepository)
    {                
        this.marketsRepository = marketsRepository;
    }
}

Редактирование, Что самый легкий путь состоит в том, чтобы посмотреть на MSIL?

23
задан Greg 20 August 2010 в 15:40
поделиться

5 ответов

Преимущество чисто семантическое. Это поможет пользователям вашего кода четко понять, что это поле нельзя изменить после создания объекта. Компилятор предотвратит нежелательные изменения этого поля. Я полностью согласен со следующей цитатой из Python Zen :

Явное лучше, чем неявное.

Некоторые подробности:

Единственная разница между обычным полем и полем только для чтения - это флаг initonly в IL. В нем нет оптимизации (как и с константами), потому что на самом деле он позволяет все операции (получение и установка, но только в ctor). Это просто подсказка компилятору: не позволяйте его менять после построения.

.field public initonly int32 R
26
ответ дан 29 November 2019 в 02:03
поделиться

Это не столько низкоуровневая производительность, сколько высокоуровневая сопровождаемость. Сделать вещи доступными для чтения - это одна из возможностей ограничить и контролировать количество мест, где определенное значение может быть изменено. Это, в свою очередь, означает, что вы уменьшаете взаимозависимость между классами (так называемое "свободное соединение"); в результате получается приложение с меньшим количеством внутренних зависимостей и, следовательно, меньшей сложностью. Другими словами, поля и свойства, доступные только для чтения, делают ваше приложение более удобным для обслуживания.

9
ответ дан 29 November 2019 в 02:03
поделиться

Это также может помочь обнаружить некоторые ошибки. Значение присваивается только в конструктиве, и это может быть проблемой, если вы забыли изменить его в другом месте или нет. А если значение не должно быть изменено, то вы помечаете его как только для чтения.

2
ответ дан 29 November 2019 в 02:03
поделиться

Возможно, вас заинтересует этот ответ.

Ключевое слово readonly используется для того, чтобы объявить переменную-член константой, но позволяет вычислять значение во время выполнения. Это отличается от константы, объявленной с модификатором const которая должна иметь значение должно быть задано во время компиляции. Используя readonly вы можете установить значение поля либо в объявлении, либо в конструкторе объекта, который поле является членом.

1
ответ дан 29 November 2019 в 02:03
поделиться

Мой профессор когда-то учил меня, что объявление чего-то только для чтения - это способ признаться вашему компьютеру в том, что вы делаете ошибки.

2
ответ дан 29 November 2019 в 02:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: