Readonly in C#

In C#, a readonly keyword is a modifier which is used in the following ways:

1. 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. Such types of fields can only be assigned or reassigned multiple times only at the declaration or in a constructor. They are not assigned after the constructor exit. If the readonly modifier is used with a value type field, then the field is immutable. And if the readonly modifier is used with a reference type field, then the readonly modifier prevents the field from replaced by the different instances of the reference type, here the readonly modifier does not stop the instance data of the field from being modified through the read-only field. In static and instance constructors, you are allowed to pass a readonly field as an out or ref parameter.

Example:

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to illustrate
// how to create a readonly field
using System;
  
class GFG {
  
    // readonly variables
    public readonly string str1;
    public readonly string str2;
  
    // Readonly variable
    // This variable is 
    // initialized at declaration time
    public readonly string str3 = "gfg";
  
    // The values of the readonly
    // variables are assigned
    // Using constructor
    public GFG(string a, string b)
    {
  
        str1 = a;
        str2 = b;
        Console.WriteLine("Display value of string 1 {0}, "
                         + "and string 2 {1}", str1, str2);
    }
  
    // Main method
    static public void Main()
    {
        GFG ob = new GFG("GeeksforGeeks", "GFG");
    }
}

chevron_right


Output:

Display value of string 1 GeeksforGeeks, and string 2 GFG

Here, the value of the str1 and str2 is assigned in the constructor.



2. Readonly Structure: In the readonly structure, readonly modifier indicates that the given structure is immutable. When you create a readonly structure, it is necessary to use a readonly modifier with its fields, if you do not do this, then the compiler will give an error.

Example:

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to illustrate how 
// to create a readonly structure
using System;
  
// Readonly structure
public readonly struct Author
{
  
    public readonly string Name { get; }
    public readonly int Article { get; }
    public readonly string Branch { get; }
    public Author(string name, int article, string branch)
    {
  
        this.Name = name;
        this.Article = article;
        this.Branch = branch;
    }
}
  
class GFG {
  
    // Main method
    static public void Main()
    {
        Author a = new Author("Rohit", 67, "CSE");
        Console.WriteLine("Author name: " + a.Name);
        Console.WriteLine("Total articles: " + a.Article);
        Console.WriteLine("Branch name: " + a.Branch);
    }
}

chevron_right


Output:

Author name: Rohit
Total articles: 67
Branch name: CSE

3. Readonly Members: This feature is introduced in C# 8.0. In this feature, you are allowed to use a readonly modifier to any member of the structure. This readonly modifier specifies that the member is not allowed to modify. It is better than applying the whole structure readonly.

Example:

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to illustrate how 
// to create a readonly member
using System;
  
public struct Customer
{
  
    public string Name { get; }
    public int Price { get; }
  
    // Readonly member
    public readonly string Product { get; }
  
    public Customer(string name, string product, int price)
    {
  
        this.Name = name;
        this.Product = product;
        this.Price = price;
    }
}
  
class GFG {
  
    // Main method
    static public void Main()
    {
        Customer a = new Customer("Sumit", "Mobile Phone", 2398);
        Console.WriteLine("Customer name: " + a.Name);
        Console.WriteLine("Product: " + a.Product);
        Console.WriteLine("Price: " + a.Price);
    }
}

chevron_right


Output:

Customer name: Sumit
Product: Mobile Phone
Price: 2398



My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.


Article Tags :

Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.