要得到一个类实例的地址为什么用@self会出错(200分)

  • 主题发起人 主题发起人 slfeng
  • 开始时间 开始时间
一个节点需要访问它的兄弟节点时:
GraphNode.Caption:=GraphNode.Parent.GraphNodes[2].Caption;
 
两三天没有上论坛,来晚了。<主要是因为winxp下面装了Mediaplayer 9,以后问题不断,呵呵>
我想,问题出在我的身上。
我对Delphi里面Class的理解有些误区,把它的概念和Record有些混淆
主要是我潜意识认为类的赋值语句会和Record一样,每一个成员变量分别赋值,会有很大的开销。这也是我给Class再次建立了指针的原因。
var a: classA;
b: classA;
begin
a := b;
end;
现在,我大概明白了,这段代码里面 a, b实际上都是一个类似指针的东西,a := b只是相当于指针复制了一份。开销很小。
不知道这样理解对不对
还有什么问题,请 aizb 指正。
谢谢
顺便说一下
classA = class(TObject)
Parent : ClassB;
// ClassB没有定义还
end;

classB = class(TObject)
A : Array of classA
end;
编译器通不过
因为除了指针,好像必须先定义再使用。
不知道Object Pascal里面有没有类似C++里面提前定义的概念。
 
多人接受答案了。
 
你的理解没错:类就是一种特殊类型的有类型指针,指它赋值仅仅是对同一内存地址的多次引用。
另外你说的提前定义也是有的:
TClassB=Class;
//这里定义一个TClassB,但是没有任何实际的东东。
TClassA = class(TObject)
Parent : TClassB;
//这里使用TClassB,编译器往前找到TClassB的定义发现它没有任何实际定义,就会到后面去找。
//但是这种用法只能在同一Type段。
end;

TClassB = class(TObject)
A : Array of TClassA;
end;

另外建议在定义类的时候在类前面用上T前缀。
这样会便于阅读!
 
后退
顶部