【问题标题】:Why am I able to access private class variables from outside the class, and how can I prevent it?为什么我能够从类外部访问私有类变量,如何防止它?
【发布时间】:2017-01-16 16:49:19
【问题描述】:

我正在使用此代码

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;

我想创建一个实例计数器,并将一些类变量设置为私有。问题很简单,看这张图:

正如您在红色框中看到的那样,有一些我已声明为私有的类变量。我不希望他们出现。我只希望公共类函数能够显示计数器。我能做什么?

【问题讨论】:

  • 这个类和这个表单定义在同一个单元里吗?
  • 是的。我应该把这门课放在另一个单元吗?然后在我有表格的主单元中说“使用单元和类”
  • 不一定,这只是证实了我的怀疑。同一单元中的类可以访问彼此的私有成员。如果我没记错的话,我相信strict private 应该可以为您解决问题。
  • 将其作为答案。我忘记了严格,因为我不经常使用它,你是对的。它现在可以工作了:)

标签: delphi access-modifiers


【解决方案1】:

documentation 中所述,可以从定义该类的单元内的任何位置访问一个类的private 部分。为了避免这种情况,并消除同一单元中其他地方对这些私有类成员的访问,请改用strict private

当然,如果您的应用程序设计需要它,您也可以将此类移至另一个单元,这反过来也会产生您正在寻找的效果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-30
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 2013-09-20
    • 1970-01-01
    相关资源
    最近更新 更多