Implémenter une propriété en lecture seule en C#

Bilal Shahid 15 février 2024
  1. Déclarer la propriété en lecture seule sur une variable lors de l’initialisation en C#
  2. Implémenter une propriété en lecture seule à l’aide d’une simple propriété get en C#
Implémenter une propriété en lecture seule en C#

Aujourd’hui, nous allons apprendre à créer une propriété en lecture seule en C#, afin qu’elle ne puisse être lue et non modifiée.

Déclarer la propriété en lecture seule sur une variable lors de l’initialisation en C#

Nous avons travaillé sur la classe CAR pour les deux derniers articles. Utilisons la même classe et essayons d’implémenter une propriété en lecture seule. Disons que notre classe CAR a une propriété appelée maker_id que nous voulons garder en lecture seule pour des raisons de sécurité.

using System;

class CAR {
  private readonly int maker_id;

  public CAR(int maker_id) {
    this.maker_id = maker_id;
  }

  public int get_maker_id() {
    return maker_id;
  }
}

public class Program {
  static void Main(String[] args) {
    CAR x = new CAR(5);
    Console.WriteLine(x.get_maker_id());
  }
}

Nous avons donc déclaré le maker_id comme readonly. Si vous exécutez ce qui précède, la sortie sera :

5

Supposons donc que nous souhaitions maintenant ajouter un autre setter pour notre champ maker_id. Nous pouvons alors faire quelque chose comme suit :

public void set_maker_id(int maker_id) {
  this.maker_id = maker_id;
}

Mais, vous remarquerez maintenant qu’il génère une erreur :

Propriété en lecture seule C# sur la variable - Erreur

Vous pouvez donc voir que la propriété readonly ne nous permet d’affecter la valeur qu’une seule fois à une variable dans le constructeur. Sinon, il a tendance à générer des erreurs et à refuser toute modification en raison de l’accessibilité.

Le code complet est affiché ci-dessous :

using System;

class CAR {
  private readonly int maker_id;

  public CAR(int maker_id) {
    this.maker_id = maker_id;
  }

  public void set_maker_id(int maker_id) {
    this.maker_id = maker_id;  // line ERROR
  }

  public int get_maker_id() {
    return maker_id;
  }
}

public class Program {
  static void Main(String[] args) {
    CAR x = new CAR(5);
    Console.WriteLine(x.get_maker_id());
  }
}

L’erreur a été mentionnée dans les commentaires du code.

Implémenter une propriété en lecture seule à l’aide d’une simple propriété get en C#

Nous pouvons écrire la propriété maker_id comme suit :

private int maker_id { get; }

Et si vous essayez d’écrire une fonction comme suit :

public void set_val(int val) {
  this.maker_id = val;
}

Une erreur sera produite comme suit :

Propriété en lecture seule C# utilisant GET - Erreur

Vous voyez donc comment la définition de la propriété get en fait une propriété en lecture seule. Le code complet est le suivant :

using System;

class CAR {
  private int maker_id {
    get;
    set;
  }

  public CAR(int maker_id) {
    this.maker_id = maker_id;
  }
}

class Program {
  static void Main(String[] args) {
    CAR x = new CAR(5);
  }
}

Non seulement cela suit les règles de la convention, mais cela a également tendance à casser les sérialiseurs. De plus, il ne change pas et a tendance à être immuable.

Si vous voulez vous assurer que get renvoie quelque chose, créez le code comme suit :

class CAR {
  public int maker_id {
    get { return maker_id; }
  }
}

C’est ainsi que vous implémentez une lecture seule en C#.

Auteur: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub

Article connexe - Csharp Property