Expliquez la différence entre les mots clés const et readonly en C#

WBOY
Libérer: 2023-09-15 16:33:02
avant
1039 Les gens l'ont consulté

Expliquez la différence entre les mots clés const et readonly en C#

En C#, les mots-clés const et readonly sont utilisés pour définir des valeurs immuables qui ne peuvent pas être modifiées une fois déclarées. Il existe cependant des différences importantes entre les deux. Le modificateur

const

const déclare des valeurs constantes qui sont connues au moment de la compilation et ne changent pas, c'est-à-dire qu'elles sont immuables. En C#, seuls les types intégrés peuvent être marqués const. Les types définis par l'utilisateur (tels que les classes, les structures, etc.) ne peuvent pas être const. De plus, les types de membres de classe (tels que les méthodes, les propriétés ou les événements) ne peuvent pas être marqués comme constantes.

Vous devez initialiser les constantes lors de la déclaration.

class Period{
   public const int hours = 12;
   public const int minutes = 60;
}
Copier après la connexion

Les constantes peuvent être marquées avec n'importe quel modificateur de visibilité, c'est-à-dire privé, public, protégé, protégé interne ou privé protégé.

Les constantes agissent également comme des valeurs statiques, c'est-à-dire que la valeur de la constante est associée à toutes les instances de la classe. Vous n'êtes pas obligé de les marquer explicitement à l'aide du mot-clé static. Vous ne pouvez pas accéder aux constantes à l'aide des variables d'instance de la classe, vous devez utiliser le nom de la classe.

Les champs marqués en lecture seule ne peuvent être déclarés que ou dans un constructeur. Une fois qu'une instance d'une classe est créée, les champs en lecture seule ne peuvent pas être modifiés.

Si le champ est de type valeur, le marquer en lecture seule le rend immuable. D'un autre côté, si le champ en lecture seule est de type référence, vous pouvez toujours modifier les données de l'objet auquel la variable fait référence. Toutefois, vous ne pouvez pas modifier la référence pour pointer vers un nouvel objet.

class Person{
   private readonly string _title;
   private readonly string _skill;
   public Person(string title, string skill){
      _title = title;
      _skill = skill;
   }
}
Copier après la connexion

Les champs en lecture seule peuvent être attribués plusieurs fois dans la déclaration de champ et dans n'importe quel constructeur. De plus, il peut avoir des valeurs différentes selon le constructeur utilisé.

Une différence importante entre les deux est que les champs const ou readonly déclarés dans un assembly seront compilés lorsqu'ils seront utilisés dans un autre assembly.

< ul class="list">
  • Pour les valeurs const, c'est comme rechercher et remplacer. La valeur constante est « intégrée » dans le langage intermédiaire du deuxième assembly. Cela signifie que si vous mettez à jour la constante, le deuxième assembly aura toujours la première valeur jusqu'à ce que vous le recompiliez.

  • Pour les valeurs en lecture seule, c'est comme une référence à un emplacement mémoire. La valeur n’est pas intégrée dans le langage intermédiaire du deuxième assembly. Cela signifie que si l'emplacement mémoire est mis à jour, le deuxième assembly obtiendra la nouvelle valeur sans recompilation. La mise à jour d'un champ en lecture seule signifie que seul le premier assembly doit être compilé, et non les assemblys utilisateur.

  • Exemple

    Démonstration en temps réel

    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}");
       }
    }
    Copier après la connexion

    Sortie

    12
    John: Programmer
    Copier après la connexion

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

    source:tutorialspoint.com
    Déclaration de ce site Web
    Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
    Tutoriels populaires
    Plus>
    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal
    À propos de nous Clause de non-responsabilité Sitemap
    Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!