Durante lo sviluppo del programma ho notato accidentalmente che tutti i tipi dichiarati all'interno di una classe hanno visibilità globale.I tipi privati sono visibili a tutti?
Ho sempre pensato che la loro visibilità è limitata alla classe a meno che il tipo non sia riferito al nome del tipo di classe come TMyClass.TMytype.Value;
sto facendo qualcosa di veramente sbagliato qui, come strutture come segue:
unit MyTest;
interface
type TMyTest = class
constructor Create;
strict private
type TMyType = (NUL, SLEEP);
end;
implementation
// ...
provoca conflitti in altre unità che utilizza questa unità (MyTest).
Se l'unità ha Sleep (100); chiamata, sarà in conflitto con TMyTest.TMyType.SLEEP e la prevenzione dei conflitti è stato il motivo per cui ho incapsulato SLEEP all'interno della classe e TMyType al primo posto.
Qualche suggerimento per soluzioni alternative?
È davvero sorprendente, ma come David cita nella sua risposta: è intenzionale per i valori enum. A proposito: il conflitto di portata dei valori enum è stato un problema in Delphi per molti anni. Quindi, per convenzione, gli sviluppatori di solito prefisso valori enum. Per esempio. 'TMyType = (mtNUL, mtSLEEP);' (Qualcosa che vale la pena considerare per garantire la coerenza dello stile del codice.) Un'altra soluzione da menzionare per la sua applicabilità più generale: dove gli identificatori sono in conflitto, è possibile aggiungere il nome dell'unità desiderato per risolvere il conflitto. Per esempio. 'Windows.Sleep' –