请教一个简单问题(100分)

  • 主题发起人 主题发起人 watsonyin
  • 开始时间 开始时间
W

watsonyin

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样在类A中访问类B的私有变量?如下所示:
unit Unit2;

interface

type
B = Class
private
bValue:Integer;
public
procedure SetValue(Value:integer);
end;

type
A = Class
private
AValue:Integer;
public
procedure GetValue();
end;

implementation

procedure A.GetValue();
begin
aValue:=bValue
//此处错误,找不到bValue
end;

procedure b.SetValue(Value:integer);
begin
bValue:=Value;
end;

end.
 
B = Class
private
bValue:Integer;
public
procedure SetValue(Value:integer);
end;


A = Class
private
AValue:Integer;
bb:B ///////////////////////////
public
procedure GetValue();
end;

implementation

procedure A.GetValue();
begin
aValue:=bb.bValue
//此处错误,找不到bValue
end;

 
procedure A.GetValue();
begin
aValue:=B.bValue
//这样呢??
end;

 
声明B类型全局变量
 
aValue:=bValue
//此处错误,找不到bValue
当然不行啦, 改为
aValue := theB.Value
theB是 B类的一个实例
 
声明B的实例当然可以,却达不到我有目的。我现在是要做一个控件,B是要发布的控件,A依赖于B存在,同时要使用B的属性,该怎么办?
关于友元,不知pascal中是如何使用友元的?
 
如果A和B在同一个单元,则A, B可以互相访问对方的私有变量
TB = Class
private
bValue:Integer;
public
procedure SetValue(Value:integer);
end;

TA = Class
private
AValue:Integer;
b : TB;
public
procedure GetValue();
end;

procedure TA.GetValue();
begin
b := TB.Create;
B.SetValue(1);
aValue:=b.bValue

end;



 
做成property不就又保护value,又可以访问了。
 
protected 也是同样的错误。
看来只有hardware007,xwhope,corn1听懂了我的意思。
算了, 把分分了。
 
如果要保护B的话,也可以这样做
type
B = Class
private
bValue:Integer;
public
procedure SetValue(Value:integer);
function GetbValue:Integer
//在这里读取
end;
 
[来自:watsonyin, 时间:2004-3-5 10:34:24, ID:2485853
声明B的实例当然可以,却达不到我有目的。我现在是要做一个控件,B是要发布的控件,A依赖于B存在,同时要使用B的属性,该怎么办?
关于友元,不知pascal中是如何使用友元的? ]
估计你是从C++过来的。整个的C++逻辑。至于友元,我C++不熟。不过要完成你的要求,本身就是一个很简单的技巧。呵呵,不要不服气。
1.原理
在同一单元里边可见的类的Private是可以直接访问的
直接访问其他类的Private不是一个好习惯。一般还是通过 过程/接口/属性访问
2.实例
同 yf168 不过在访问之前根据情况可以用 Assigned判断
 
多人接受答案了。
 
大富翁没意思,我问过的问题没有一个得到满意答案的!
 

Similar threads

I
回复
0
查看
632
import
I
I
回复
0
查看
660
import
I
I
回复
0
查看
528
import
I
I
回复
0
查看
646
import
I
I
回复
0
查看
743
import
I
后退
顶部