What is Difference in readonly and const

In C#, both readonly and const are used to declare variables that cannot be modified once they are initialized, but there are some differences between them:

Initialization:
const variables must be initialized at the time of declaration with a compile-time constant value, such as a number or a string literal. readonly variables can be initialized at the time of declaration or in a constructor of the containing class.

Scope:
const variables are implicitly static and have a global scope within the containing assembly, which means they can be accessed from any part of the code in the assembly. readonly variables can have instance-level scope and can be different for each instance of the class that contains them.

Performance:
const variables are replaced with their values at compile-time, which means they are faster to access at runtime because there is no need to look up their value in memory. readonly variables are initialized at runtime and therefore incur a slight performance overhead when accessed.

Here's an example of how const and readonly variables can be used in C#:


class MyClass
{
    public const int MyConst = 10; // Compile-time constant

    public readonly int MyReadOnly; // Readonly variable

    public MyClass(int value)
    {
        MyReadOnly = value; // Initialized in constructor
    }
}

In the above example, MyConst is a const variable that is initialized at the time of declaration with a compile-time constant value. MyReadOnly is a readonly variable that is initialized in the constructor with a value that can vary for each instance of the MyClass class.

In summary, the main differences between const and readonly variables are that const variables must be initialized with a compile-time constant value, have a global scope, and are faster to access at runtime, while readonly variables can be initialized in a constructor, have instance-level scope, and incur a slight performance overhead when accessed.