Преимущество наличия readonly
в поле состоит в том, что это явное заявление о том, что поле не изменится в течение времени жизни содержащего экземпляра.Во многих случаях это облегчает рассуждения о поведении данного метода.Например,
void Method() {
var marker = myservice.StartOperation();
try {
SomeOtherMethod();
} finally {
myservice.StopOperation(marker);
}
}
Предположим, что StartOperation
и StopOperation
являются методами, которые должны вызываться парами в данном экземпляре IMyService
.Когда myservice
является полем readonly
, вы можете смотреть только на эту функцию и иметь высокую степень уверенности в выполнении этого контракта.
Однако, если это не readonly
, вы должны немедленно подозревать SomeOtherMethod
и любой другой метод, транзитивно вызванный из этой функции.Если кто-то из них сможет сбросить поле myservice
внезапно, вы нарушите контракт и получите некоторые очень тонкие ошибки.