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;
fp;
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
f0p;//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.
现在有一个问题,'保护方法'本来是只允许'当前类'和'当前类的子类'访问
但有了以上的两种情况我不知道
'非当前类'和'非当前类的子类'访问'保护方法'是错的,这句话是怎样写程序才实验出来
'非当前类'和'非当前类的子类'访问'保护方法'是错的,这句话是怎样写程序才实验出来
问题说明:
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;
fp;
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
f0p;//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.
现在有一个问题,'保护方法'本来是只允许'当前类'和'当前类的子类'访问
但有了以上的两种情况我不知道
'非当前类'和'非当前类的子类'访问'保护方法'是错的,这句话是怎样写程序才实验出来