delphi - ¿Los tipos privados son visibles para todos?



types visibility (1)

Durante el desarrollo del programa, accidentalmente noté que todos los tipos que se declaran dentro de una clase tienen visibilidad global.

Siempre he pensado que su visibilidad está restringida a la clase a menos que el tipo se refiera con el nombre del tipo de clase como TMyClass.TMytype.Value;

¿Estoy haciendo algo realmente mal aquí, como estructuras como las siguientes:

unit MyTest;

interface

type TMyTest  = class
    constructor Create;

    strict private
        type TMyType = ( NUL, SLEEP );

end;

implementation

// ...

causa conflictos en otras unidades que usan esta unidad (MyTest).

Si la unidad tiene Sleep (100); llamada, entrará en conflicto con TMyTest.TMyType.SLEEP y la prevención de conflictos fue la razón por la que encapsulé SLEEP dentro de la clase y TMyType en primer lugar.

¿Alguna sugerencia para una solución?


Esto es en realidad por diseño. Sus valores de enumeración tienen unidad o alcance global. No son privados ya que no forman parte de la clase. Se encuentran a nivel global.

Puede organizar que los valores de enumeración tengan alcance local incluyendo la directiva de enumeración de ámbito :

{$SCOPEDENUMS ON}

La directiva $SCOPEDENUMS habilita o inhabilita el uso de enumeración de ámbito en el código Delphi. Más específicamente, $SCOPEDENUMS afecta solo a las definiciones de nuevas enumeraciones, y solo controla la adición de los símbolos de valor de la enumeración al alcance global.

En el estado {$SCOPEDENUMS ON} , las enumeraciones tienen un ámbito y los valores de enumeración no se agregan al ámbito global. Para especificar un miembro de una enumeración de ámbito, debe incluir el tipo de enumeración.





private