E2129 Affectation impossible à une propriété en lecture seule (Delphi)

De RAD Studio
Aller à : navigation, rechercher

Remonter à Messages d'erreur et d'avertissement (Delphi)

La propriété à laquelle vous essayez d'affecter une valeur n'avait pas spécifié de clause 'write', elle devient par conséquent une propriété en lecture seulement.



program Produce;

  type
    Base = class
      s: String;

      property Title: String read s;
    end;

  var
    c: Base;

  procedure DiddleTitle
  begin
    if c.Title =  then
      c.Title := 'Super Galactic Invaders with Turbo Gungla Sticks';

      (*effectue un autre travail sur c.Title*)
  end;

begin
end.
    

Si une propriété ne spécifie pas de clause 'write', elle devient effectivement une propriété read-only. Il est impossible d'affecter une valeur à une propriété en lecture seule, ainsi le compilateur émet une erreur sur l'affectation de 'c.Title'.



program Solve;

  type
    Base = class
      s: String;

      property Title: String read s;
    end;

  var
    c: Base;

  procedure DiddleTitle
    var title : String;
  begin
    title := c.Title;
    if Title =  then
      Title := 'Super Galactic Invaders with Turbo Gungla Sticks';
      (*effectue un autre travail sur title*)
  end;

begin
end.
    

La solution, si vous avez le code source, est de fournir une clause write à la propriété en lecture seule (bien sûr, ceci peut modifier considérablement les sémantiques de la classe de base et ne doit pas être fait à la légère). Une autre alternative consiste à introduire une variable intermédiaire qui contiendrait la valeur de la propriété read-only (c'est cette alternative que vous pouvez voir dans le code ci-dessus.