Delphi中“严格私有”和“受保护”访问修饰符之间的区别?
发布时间:2020-12-15 10:06:01 所属栏目:大数据 来源:网络整理
导读:但是我用Pascal语言学习编程和结构化编程之后,我开始用Delphi了解OOP. 所以,我真的不明白严格的私人教学和受保护的指令之间的区别..所以这里是我的代码,它是关于一个“包”的创作,只是介绍我的德尔福的教训,老师告诉我们如何创建对象: uses SysUtils;Type T
|
但是我用Pascal语言学习编程和结构化编程之后,我开始用Delphi了解OOP.
所以,我真的不明白严格的私人教学和受保护的指令之间的区别..所以这里是我的代码,它是关于一个“包”的创作,只是介绍我的德尔福的教训,老师告诉我们如何创建对象: uses
SysUtils;
Type
Tbag= class (Tobject)
strict private
FcontenM : single;
Fcontent : single;
protected
function getisempty : boolean;
function getisfull: boolean;
public
constructor creer (nbliters : single);
procedure add (nbliters : single);
procedure clear (nbliters : single);
property contenM : single read FcontenM;
property content : single read Fcontent;
property isempty : boolean read getisempty;
property isfull : boolean read getisfull;
end;
function Tseau.getisempty;
begin
result := Fcontent = 0;
end;
function Tseau.getisfull;
begin
result := Fcontent = FcontenM;
end;
constructor Tseau.creer(nbliters: Single);
begin
inherited create;
FcontenM := nbliters;
end;
procedure Tbag.add (nbliters: Single);
begin
if ((FcontenM - Fcontent) < nbliters) then fcontent := fcontenM
else Fcontent := (Fcontent + nbliters);
end;
procedure Tbag.clear (nbliters: Single);
begin
if (Fcontent > nbliters) then Fcontent := (Fcontent - nbliters)
else Fcontent := 0;
end;
所以这只是对象创建的一个例子.我明白什么是公共声明(外界接近的界面),但是我看不到私有和受保护的声明有什么区别..谢谢你试图帮助我.. 解决方法
私人,受保护和公共的区别是非常简单的:
私有成员/方法仅在声明它们的类中可见. 在Delphi中有一个“bug”,使所有成员在同一个单元内公开的可见性. strict关键字纠正了这个行为,所以私有实际上是私有的,甚至在一个单元内.为了良好的封装,我建议始终使用strict关键字. 示例代码: type
TFather = class
private
FPriv : integer;
strict private
FStrPriv : integer;
protected
FProt : integer;
strict protected
FStrProt : integer;
public
FPublic : integer;
end;
TSon = class(TFather)
public
procedure DoStuff;
end;
TUnrelated = class
public
procedure DoStuff;
end;
procedure TSon.DoStuff;
begin
FProt := 10; // Legal,as it should be. Accessible to descendants.
FPriv := 100; // Legal,even though private. This won't work from another unit!
FStrictPriv := 10; // <- Compiler Error,FStrictPrivFather is private to TFather
FPublic := 100; // Legal,naturally. Public members are accessible from everywhere.
end;
procedure TUnrelated.DoStuff;
var
F : TFather;
begin
F := TFather.Create;
try
F.FProt := 10; // Legal,but it shouldn't be!
F.FStrProt := 100; // <- Compiler error,the strict keyword has "made the protection work"
F.FPublic := 100; // Legal,naturally.
finally
F.Free;
end;
end;
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
