Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What are the benefits to marking a field as `readonly` in C#?

What are the benefits of having a member variable declared as read only? Is it just protecting against someone changing its value during the lifecycle of the class or does using this keyword result in any speed or efficiency improvements?

like image 929
leora Avatar asked Nov 10 '08 03:11

leora


People also ask

What is the purpose of read only variables?

3.7 Read-Only Variables Read-only variables can be used to gather information about the current template, the user who is currently logged in, or other current settings. These variables are read-only and cannot be assigned a value.

What is the purpose of readonly modifier?

Readonly Fields: In C#, you are allowed to declare a field using readonly modifier. It indicates that the assignment to the fields is only the part of the declaration or in a constructor to the same class.

What are the properties of read only?

Read only means that we can access the value of a property but we can't assign a value to it. When a property does not have a set accessor then it is a read only property. For example in the person class we have a Gender property that has only a get accessor and doesn't have a set accessor.

What is read only in programming?

Read-only is a file system permission that only allows a user to read or copy stored data, but not write new information or edit the data. A file, folder, or an entire disk may be set as read-only to prevent accidentally changing the file's contents. A read-only object may also be referred to as write-protected.


1 Answers

I don't believe there are any performance gains from using a readonly field. It's simply a check to ensure that once the object is fully constructed, that field cannot be pointed to a new value.

However "readonly" is very different from other types of read-only semantics because it's enforced at runtime by the CLR. The readonly keyword compiles down to .initonly which is verifiable by the CLR.

The real advantage of this keyword is to generate immutable data structures. Immutable data structures by definition cannot be changed once constructed. This makes it very easy to reason about the behavior of a structure at runtime. For instance, there is no danger of passing an immutable structure to another random portion of code. They can't changed it ever so you can program reliably against that structure.

Robert Pickering has written a good blog post about the benefits of immutability. The post can be found here or at the archive.org backup.

like image 133
JaredPar Avatar answered Oct 02 '22 19:10

JaredPar