2016-09-08 2 views
12

Я использую этот кодПочему я могу получить доступ к переменным частного класса вне класса и как его предотвратить?

type 
TSomeClass = class(TOBject) 
private 
    class var InstanceCount : integer; 
    class var TotalInstanceCount : integer; 
public 
    class function instances: integer; 
    class function totalInstances: integer; 
    constructor Create; 
    destructor Destroy; 
end; 

constructor TSomeClass.Create; 
begin 
inherited Create; 
Inc(InstanceCount); 
Inc(TotalInstanceCount); 
end; 

destructor TSomeClass.Destroy; 
begin 
Dec(InstanceCount); 
inherited; 
end; 

class function TSomeClass.instances; 
begin 
    Result := InstanceCount; 
end; 

class function TSomeClass.totalInstances; 
begin 
    Result := TotalInstanceCount; 
end; 

Я хочу, чтобы счетчик экземпляра и я установить некоторые переменные класса как частные. Вопрос очень легко, просто посмотрите на этой картине:

enter image description here

Как вы можете видеть в красной коробке, есть классовые переменные, которые я объявляемый как частные. Я не хочу, чтобы они появлялись. Я хочу, чтобы функции публичного класса могли показывать счетчики. Что я могу сделать?

+0

Этот класс определен в том же подразделении, что и эта форма? –

+0

Да. Должен ли я помещать этот класс в другое подразделение? а затем в главном блоке, где у меня есть форма: «Использует unitwithclass» –

+4

Не обязательно, это только подтверждает мое подозрение. Классы в одном и том же подразделении могут обращаться к частным членам друг друга. Если я не ошибаюсь, я считаю, что «строгий частный» должен сделать трюк для вас. –

ответ

16

Как описано в разделе documentation, раздел private класса может быть доступен из любой точки устройства, где этот класс определен. Чтобы избежать этого и устранить доступ к этим частным членам класса из другого места в том же блоке, вместо этого используйте strict private.

Конечно, если дизайн вашего приложения требует его, вы также можете перенести этот класс на другой блок, что, в свою очередь, даст эффект, который вы ищете.

Смежные вопросы