Home > Backend Development > C#.Net Tutorial > Explain the difference between const and readonly keywords in C#

Explain the difference between const and readonly keywords in C#

WBOY
Release: 2023-09-15 16:33:02
forward
1111 people have browsed it

Explain the difference between const and readonly keywords in C#

In C#, both the const and readonly keywords are used to define immutable values ​​that cannot be modified once declared. However, there are some important differences between the two.

const

The const modifier declares constant values ​​that are known at compile time and do not change, i.e. they are immutable. In C#, only built-in types can be marked const. User-defined types (such as classes, structures, etc.) cannot be const. Additionally, class member types (such as methods, properties, or events) cannot be marked as constants.

You must initialize constants during declaration.

class Period{
   public const int hours = 12;
   public const int minutes = 60;
}
Copy after login

Constants can be marked with any visibility modifier, i.e. private, public, protected, protected internal or private protected.

Constants also act as static values, that is, the value of the constant is consistent with all instances of the class. You don't have to mark them explicitly using the static keyword. You cannot access constants using instance variables of the class, you must use the class name.

Fields marked as read-only can only be declared or in a constructor. Once an instance of a class is created, read-only fields cannot be modified.

If the field is a value type, marking it as read-only makes it immutable. On the other hand, if the read-only field is a reference type, then you can still change the data of the object the variable refers to. However, you cannot change the reference to point to a new object.

class Person{
   private readonly string _title;
   private readonly string _skill;
   public Person(string title, string skill){
      _title = title;
      _skill = skill;
   }
}
Copy after login

Read-only fields can be assigned multiple times in the field declaration and in any constructor. Additionally, it can have different values ​​depending on the constructor used.

An important difference between the two is that const or readonly fields declared in one assembly are compiled when used in another assembly.

< ul class="list">
  • For const values ​​it's like find and replace. The constant value is "baked" into the intermediate language of the second assembly. This means that if you update the constant, the second assembly will still have the first value until you recompile it.

  • For read-only values, it acts like a reference to a memory location. The value is not embedded in the second assembly's intermediate language. This means that if the memory location is updated, the second assembly will get the new value without recompiling. Updating a read-only field means that only the first assembly needs to be compiled, not any user assemblies.

  • Example

    Real-time demonstration

    using System;
    class Program{
       static void Main(){
          Console.WriteLine(Period.HOURS);
          var person = new Person("John", "Programmer");
          person.Print();
       }
    }
    class Period{
       public const int HOURS = 12;
       public const int MINUTES = 60;
    }
    class Person{
       private readonly string _title;
       private readonly string _skill;
       public Person(string title, string skill){
          _title = title;
          _skill = skill;
       }
       public void Change(string skill){
          // Error: A readonly field cannot be assigned to
          // this._skill = skill;
       }
       public void Print(){
          Console.WriteLine($"{_title}: {_skill}");
       }
    }
    Copy after login

    Output

    12
    John: Programmer
    Copy after login

    The above is the detailed content of Explain the difference between const and readonly keywords in C#. For more information, please follow other related articles on the PHP Chinese website!

    source:tutorialspoint.com
    Statement of this Website
    The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
    Popular Tutorials
    More>
    Latest Downloads
    More>
    Web Effects
    Website Source Code
    Website Materials
    Front End Template