‘保护方法‘又一个问题(50分)

  • 主题发起人 主题发起人 tom.com
  • 开始时间 开始时间
T

tom.com

Unregistered / Unconfirmed
GUEST, unregistred user!
问题:
'非当前类'和'非当前类的子类'访问'保护方法'是错的,这句话是怎样写程序才实验出来

问题说明:


1)Delphi是对单元封装的,也就是说在同一单元中,任何过程都可以对类中的私有、保护、公有、公布方法引用.
所以就算不是‘当前类’或‘当前类的子类’要调用‘别的类’的保护方法,也不会错
例如
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type //自定义类
op=class
protected
procedure hu;
end;
var
Form1: TForm1;
f:op;
implementation

{$R *.DFM}
procedure op.hu;
begin
showmessage('op.hu')
end;
procedure TForm1.Button1Click(Sender: TObject);//调用保护方法

begin
f:=op.create;
f.hu;
end;

end.

2)一个类的私有和保护方法,一般情况下,对外部单元是不可访问.
所以就算'当前类的子类’要调用‘父类’的保护方法,也会错
1)unit Unit1;

interface

uses
unit2,Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
f0:op;//op类在unit2中
begin
f0:=op.create
f0:=cr.create;
f0.hu;//出现错误
f1.hu;//出现错误
end;

end.

2)unit Unit2;

interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
op=class
protected
procedure hu;
end;
cr=class(op)
end;
implementation
procedure op.hu;
begin
showmessage('op.hu')
end;
end.

现在有一个问题,'保护方法'本来是只允许'当前类'和'当前类的子类'访问
但有了以上的两种情况我不知道
'非当前类'和'非当前类的子类'访问'保护方法'是错的,这句话是怎样写程序才实验出来




 
接连问PASAL语法的是同一个人吧

这个问题我记得我好象回答过
怎么又问啦

我记得我还纠正了这一个说法
因为这个说法本身就是错的
你在哪看到的
是谁这么说的

那我只好再贴一次以引起你的注意了

"别的类调用当前类的保护方法,也就是说ta调用tb.kk"这句话怎样用程序实现.
----这句话从哪看到的?
是在别的类的实例中调用这个类的实例的保护方法吧

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses Unit2;

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
AClass: TAClass;
begin
AClass := TAClass.Create;
try
AClass.BProc;
//如果此处改为ACLASS.APROC, 编译都通不过
finally
AClass.Free;
end;
end;

end.

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

interface

uses
Dialogs;

type
TAClass = class
protected
procedure AProc;
public
procedure BProc;
end;

implementation

procedure TAClass.AProc;
begin
ShowMessage('轮不到你看我, 编译都通不过:)');
end;

procedure TAClass.BProc;
begin
ShowMessage('看见我了吧:)');
end;

end.

 
接受答案了.
 
后退
顶部