追溯TStrings,TStringList 的Create .不理解,还望高手指点 TStrings,TStringList都没有Create那意味着直接继承于TObject可是TObject的Create根本就没有内容只有begin end;那还初始化什么??不理解,还望高手指点 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 看了一下DELPHI的帮助,就是TOBJECT的CREATE方法。The Create constructor defined by TObject allocates memory but does not initialize data.看来开始的估计是正确的。 分配空间。Tstrings,TStringList是类。他必须创建生成对象才可以使用。 又查了一段资料:而TObject的Create构造函数调用了系统的ClassCreate过程。系统的ClassCreate过程又通过调用TObject类的虚方法NewInstance。调用TObject的NewInstance方法的目的是要建立对象的实例空间。TObjec类的NewInstance方法将根据编译器在类信息数据中初始化的对象实例尺寸(InstanceSize),调用GetMem过程为该对象分配内存。然后调用TObject类InitInstance方法将分配的空间初始化。InitInstance方法首先将对象空间的头4个字节初始化为指向对象类的VMT的指针,然后将其余的空间清零。建立对象实例最后,还调用了一个虚方法AfterConstruction。最后,将对象实例数据的地址指针保存到AnObject变量中,这样,AnObject对象就诞生了。原来是这样的啊 constructor TObject.Create;beginend;这是TObject的构造函数好象没有调用什么呀 有机会看一下李维的inside VCL说得很详细,borland用了一个资源分配管理器在编译器中,没有由于涉及到很高深的技术,所以没有公开出来。所以你Create时,看不到什么码,但其他由于你声明了constructor,所以编译器会自动为你的类分配资源。所以这一点是不用担心的 你只要记住一点就可以了,类的构造函数给用户调用的用处基本上就是初始化一些类成员或其他一些相关操作,而真正的对象创建是不要你干预的,Delphi的编译器自动会创建的,基本原理就是楼上所说调用ClassCreate函数及以下的一系列操作。对象销毁时也一样,是调用ClassDestory函数来释放内存,析构函数的用处是销毁你在类中自定义的一些成员! 另外,由于TStrings是一个抽象类(它含有抽象方法),所以你无法直接调用TStrings.Create,而是要调用它的派生类的构造函数,比如:var Strs: TStrings;begin Strs := TStringList.Create; //操作end; 关于由于TStrings是一个抽象类(它含有抽象方法),所以你无法直接调用TStrings.Create,而是要调用它的派生类的构造函数,比如:var Strs: TStrings;begin Strs := TStringList.Create; //操作end;不用讲了============borland用了一个资源分配管理器在编译器中,没有由于涉及到很高深的技术不信==========《delphi原子世界》没看过 那楼主你到底理解了没有,还是没有或不信,那可以去问Borland的工程师!他们应该知道这是怎么回事的! 请参见http://community.csdn.net/Expert/topic/3106/3106729.xml?temp=7.032412E-02 我不是叫你去看李维的inside VCL,他已经讲得很清楚了,你不信那是你的事了。反正我就说了我该说了的。 xml文件读入错误 想用DELPHI做个饶过中国电信ADSL上网计时的软件... 在StringGrid中 鼠标上下移动,行的高亮也跟着移动 widestring到string怎么转换 在线等!! 添加了IE右键菜单,怎么给他加二级子菜单呢? 这段代码怎么理解??? asp调用delphi开发的asp对象方法时为什么老没法传递参数. 如何像OICQ、Netant那样实现任务栏状态区放图标? delphi中的静态成员变量 怎样使speebbutton可以显示在WeBbrowser上面? 怎样实现连续打印?
Tstrings,TStringList是类。他必须创建生成对象才可以使用。
begin
end;
这是TObject的构造函数
好象没有调用什么呀
var Strs: TStrings;
begin
Strs := TStringList.Create;
//操作
end;
由于TStrings是一个抽象类(它含有抽象方法),所以你无法直接调用TStrings.Create,而是要调用它的派生类的构造函数,比如:
var Strs: TStrings;
begin
Strs := TStringList.Create;
//操作
end;不用讲了============
borland用了一个资源分配管理器在编译器中,没有由于涉及到很高深的技术不信==========
《delphi原子世界》
没看过
http://community.csdn.net/Expert/topic/3106/3106729.xml?temp=7.032412E-02
反正我就说了我该说了的。