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.