Voglio avere un record (struttura) con un comportamento 'polimorfo'. Avrà diversi campi usati in tutti i casi, e voglio usare altri campi solo quando ne ho bisogno. So che posso farlo con parti varianti dichiarate nei registri. Non so se sia possibile che in fase di progettazione posso accedere solo agli elementi di cui ho bisogno. Per essere più specifici, guarda l'esempio muggitoDelphi - record con parti varianti
program consapp;
{$APPTYPE CONSOLE}
uses
ExceptionLog,
SysUtils;
type
a = record
b : integer;
case isEnabled : boolean of
true : (c:Integer);
false : (d:String[50]);
end;
var test:a;
begin
test.b:=1;
test.isEnabled := False;
test.c := 3; //because isenabled is false, I want that the c element to be unavailable to the coder, and to access only the d element.
Writeln(test.c);
readln;
end.
È possibile?
+1. Ero sicuro all'80% che questa è la risposta ... – RBA
Questo è perfettamente corretto, ma in questo caso preferirei usare una classe invece di un record. Permetterà di aggiungere la caratteristica di ereditarietà, che ha senso qui (ad esempio, la proprietà IsEnable viene tipicamente gestita a livello di un genitore e condivisa tra i bambini). –