类里的私有成员值为什么成了inaccessible呢,具体描述如下,,,,(50分)

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

wolf2005

Unregistered / Unconfirmed
GUEST, unregistred user!
我自已写了一个类TS,有一个私有成员name
有一个public方法setname在这个方法里给name付值
然后另一个方法,启动一个线程ProcessThread,在线程里要调用TS里的一个方法xxx
结果发现xxx中的name变成了inaccessible为什么啊?
就只有这么多分了:(
 
当然是不能访问了。
自己能访问,其他东西就不能访问。
调用SETNAME不就行了?
 
程序如下:
线程程序:
procedure PReadFromTxt.Execute;
begin
{ Place thread code here }
while 1 > 0do
begin
FreeOnTerminate:=true;
if not Terminated then
synchronize(EngTxt.ProcessData);
end;
类过程
type
TEngTxt = class
private
{ Private declarations }
Name:string;
public
procedure ProcessData;//处理数据并转到主程序处理函数
end;
procedure TEngTxt.ProcessData;
begin
showmessage(Name);
end;
 
Highpeak,:
我的意思,本来是通过setname已经name赋值了,可是运行了线程以后,name已经变成inaccessible了
 
把name變為public成員看看
 
变成public也不可以
 
在线程创建前你没有对EngTxt进行Create,
肯定是这样、
 
Highpeak,
我最开始是在线程里创建了EngTxt,create以后,就是一个新的对象了吧,name值为''空,后来,我又试着在TEngTxt所在单位中定义了一个var EngTxt:TEngTxt;结果就是我上面说的情况。
 
两个基本概念:
1。类对象应该创建实例,这会给类实例分配内存,这样才可以访问类实例的属性等;
2。关于线程的Synchronize方法,它的作用是让线程的一些方法在[red]主线程[/red]中执行,一般用于与VCL同步。
 
:thx1180,
已经在一个主程序中创建EngTxt实例
 
看看《Delphi 5开发人员指南》第十一章吧,里面有关于线程的论述和示例程序,永远的Delphi有下,网址:http://fdelphi.myrice.com/delphidoc.html
 
后退
顶部