E2129 Affectation impossible à une propriété en lecture seule (Delphi)
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.