Both these words play a very important role in defining constants in an application (C#). At one sight, it seems like, both are same but exactly it is not he case. Let's understand one by one to get the clear picture.
Please note, readonly variables can be assigned either at the time of declaration or can be assigned value inside a constructor. These two are the only places, where one can assign the value of a readonly ariable. For readonly alue assignment is done at run-time and there is no difference between a regular variable and a readonly variable in terms of memory allocation.
The word const itself means, it will never change. If you are
specifying any variable as a const that means the value of the variable is
never going to change inside the application.
How we declare a constant is, by using a const keyword.
Basically, one can define const only on the primitive types, like int,
double, etc. One should make sure that the value should be assigned at the time
of declaration itself and another important thing is whatever value is set
for const variable, that value will be set at the compile time itself
and this value will get stored inside a .dll or an .exe. In later part, I'll
show u on how we can see this value inside a dll or an exe using an Ildasm. Sample code to define const variable is as:
Another keyword is the readonly. The readonly word also sounds
like a const but for the readonly variable you cannot change the value, once it
is assigned. Means it is restricting us to a value assignment. Sample code to define readonly is as follows:
Please note, readonly variables can be assigned either at the time of declaration or can be assigned value inside a constructor. These two are the only places, where one can assign the value of a readonly ariable. For readonly alue assignment is done at run-time and there is no difference between a regular variable and a readonly variable in terms of memory allocation.
Here one can notice that, reassigning both the variables named age
and PI is giving an error and on mouse hover, we can get the complete
description of error as:
Now question is, if both are having the same qualities then what’s
the point in creating two different things. Well, this is not the case because
const is a compile time constant and readonly is a run-time constant. Most of us
might be aware that the value of compile-time constants are set at the time of
declaration itself and this can be seen in ildasm also. Coming to the run-time constants, these are set at run-time and that’s the reason that it is
not mandatory to assign readonly variables at the time of declaration itself
as one can assign them in a constructor also as:
Now question is when to use what:
If the value is going to fix throughout the program and is never
going to change in any circumstances, then one should choose const.
But on the other hand, if assignment of initial value depends on some
parameter/conditions and value needs to be decide at run-time, then one can opt
for readonly and based on that initial value of a readonly variable can be set.
But please note, once the value is assigned, further modification is not at all
possible till the lifetime of the application.
ILDASM and constants:
Now, let's jump quickly on ildasm to prove the value assignment
for both of these.
As I told earlier, that const are compile time constants and are assigned at the time of declaration itself. So, same can be proved via ildasm using IL code. In ildasm, one can see the value of const variable in hexa but for readonly variable, there is no such value assigned in PI variable in ildasm.
Hope above article was useful :)
Comments
Post a Comment