Почему я могу получить доступ к переменным частного класса вне класса и как я могу его предотвратить?
Я использую этот код
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;
Я хочу создать счетчик экземпляра, и я установил некоторые переменные класса как частные. Вопрос очень прост, просто посмотрите на это изображение:
![введите описание изображения здесь]()
Как вы можете видеть в красном поле, есть переменные класса, которые я объявлял закрытыми. Я не хочу, чтобы они появлялись. Я хочу, чтобы функции публичного класса могли показывать счетчики. Что я могу сделать?
Ответы
Ответ 1
Как поясняется в документации, доступ к разделу класса private
можно получить где угодно в пределах единицы, где этот класс определен. Чтобы избежать этого и устранить доступ к этим частным членам класса из другого места в том же блоке, вместо этого используйте strict private
.
Конечно, если ваш дизайн приложения требует его, вы также можете перенести этот класс на другой блок, что, в свою очередь, даст эффект, который вы ищете.