Sunday, May 06, 2007

Campi statici e variabili di classe

Ho letto questo blog e mi sono venuti alcuni dubbi che ho poi fugato facendo alcuni esempi.
Java ha sempre avuto i campi static, cioè le variabili globali a livello di classe. In Delphi questa caratteristica è stata introdotta (per rispettare .NET) dalla versione 8 (solo .NET) poi riportata nella versione per Win32.
Il dubbio che mi è sovvenuto è il seguente:
cosa succede nel caso che una classe derivi da un'altra che ha un campo static pubblico?

La risposta è la seguente:
il campo static (cioè la variabile di classe) è condivisa tra tutte le sottoclassi della classe che ha dichiarato quel campo come static. In pratica se ho queste classi:
T1 = class
class var a:integer;
...
end;
e
T2 = class(T1)
...
end;

T1.a e T2.a riferiscono la stessa variabile.

Se voglio differenziare T2.a da T1.a DEVO dichiararla nuovamente.

Questo è lo stesso comportamento di Java.

Come indicato nel post da me citato, la precedente possibilità era di quella di usare una variabile globale a livello di unit.

La situazione è ora molto più object oriented (anche per Delphi).

No comments: