unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
Tkk=class(Tobject)
procedure kill(a,b:integer);
end;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
kk:Tkk;implementation{$R *.dfm}
procedure Tkk.kill(a,b:integer);
var
sum:integer;
begin
sum:=a+b;
showmessage(format('the sum is %d',[sum]));
end;procedure TForm1.Button1Click(Sender: TObject);
begin
kk.Create;
kk.kill(2,3);
end;end.
在上面的程序中我创建了一个类,Tkk
申明了一个类的变量:kk
我知道对象要创建需要kk:=Tkk.create;
但是我发现在没创建对象之前kk本身就有Create方法。
于是上面的 程序中我用kk.create;可以编译,但是有错误
我不明白kk.create代表什么?和kk:=Tkk.create有什么区别
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
Tkk=class(Tobject)
procedure kill(a,b:integer);
end;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
kk:Tkk;implementation{$R *.dfm}
procedure Tkk.kill(a,b:integer);
var
sum:integer;
begin
sum:=a+b;
showmessage(format('the sum is %d',[sum]));
end;procedure TForm1.Button1Click(Sender: TObject);
begin
kk.Create;
kk.kill(2,3);
end;end.
在上面的程序中我创建了一个类,Tkk
申明了一个类的变量:kk
我知道对象要创建需要kk:=Tkk.create;
但是我发现在没创建对象之前kk本身就有Create方法。
于是上面的 程序中我用kk.create;可以编译,但是有错误
我不明白kk.create代表什么?和kk:=Tkk.create有什么区别
kk.create代表由对象创建一个对象?而kk:=Tkk.create是由类创建一个对象
kk.create表示调用这个对象的构造函数,
Tkk的create是继承的TObject的,
没创建对象kk时就调用kk.create,内存里找
不到地址,编译当然就会出错了。
kk.create这个方法是你继承tobject这个基本类的方法,但是这个方法需要一个参数
kk.create(nil)就没问题了。
我记得看过一本书中介绍过这两个得最基本区别
kk.create(nil)和kk:=Tkk.create
前者创建后需要手动调用kk.destory才能释放,后者会在程序超过kk的作用域时自动调用析构函数释放所占用的控件。
具体的记不太清了,好像是上面的说法,但是有一个是肯定的,就是最好使用kk:=Tkk.create,然后再作用域结束的时候手动释放变量。