请教大家个问题,这个问题也是突然想到的,用了很久也没有发现。。
平常如果大家写个类
Type
TA = class end;在别的单元文件中引用这个单元,并且定义这个类
var
A: TA正常来说我们就要创建
但是有时候没有创建也可以用,至少在我的程序中没有发现问题,不知道区别在那里
这个和TStringList差不多。
所以请教一下大家这个都是有什么区别?谢谢!
平常如果大家写个类
Type
TA = class end;在别的单元文件中引用这个单元,并且定义这个类
var
A: TA正常来说我们就要创建
但是有时候没有创建也可以用,至少在我的程序中没有发现问题,不知道区别在那里
这个和TStringList差不多。
所以请教一下大家这个都是有什么区别?谢谢!
Form1 : Tform
首先要說清楚,類沒有構先造出來沒有一個指定的變量去引用,他就是只是個類,不是對象(當然也有 With Tform.create 這樣的)上面的是全局變量,很多人習慣: form1 := Tform.create; 那麼其它單元引用了上面的單元再直接用FORM1那是可以的
tA = class
public
class function test():string;
end;class function tA.test: string;
begin
Result:='Hello World';
end;
我的意思是说,类都是创建才能使用的(除非是类方法)
比如,一个类。自己写的。
没有create,在别的单元直接声明后(不管是不是全局的)就可以直接使用
而其create也是可以的。不知道我说明白了没有!
比如
一个类TA这个类没有类方法
我用的时候
要创建
var
A: TA
begin
A:TA.Create;
A.XX
end
这个正常的使用
但是如果这样
var
A: TA
begin
A.XX
end
也是可以的
我想知道这有什么区别!
呵呵
你的回答是我想要的。呵呵。那写的确是是一个类,如果判断是不是类?
Type
TA = class
end这难道不是类吗?
TA = class
public
function A : Boolean;
class function B : boolean;
end; 你的是意思是上面的A這個函數在對象沒有創建情況可以訪問 ??
对
我就是这个意思
TMyClass = class
public
procedure Test;
end;{ TMyClass }procedure TMyClass.Test;
begin
ShowMessage('Ok');
end;procedure TForm1.Button1Click(Sender: TObject);
var
MyObj: TMyClass;
begin
MyObj.Test;
end;
但是如果把上面的例子改为:type
TMyClass = class
private
x: Integer;
public
procedure Test;
end;{ TMyClass }procedure TMyClass.Test;
begin
ShowMessage('Ok');
end;procedure TForm1.Button1Click(Sender: TObject);
var
MyObj: TMyClass;
begin
MyObj.Test;
Myobj.x := 100;
end;那么就会出错了。即使当时不出错,退出应用程序时也会出现异常!
为什么会这样?因为一个类是由数据和方法组成的,而类的方法和数据在内存分配是不一样的,类方法地址是固定的,类数据是可变的:每一个类实例都有不同的数据(地址),所有类都享有同样的方法。调用类的构造函数就是为类事例分配数据内存,如果一个类没有数据,不用构造也可调用其方法,这其实就相当于调用了一个一般的方法而已。
就是这个意思
呵呵
非常感谢你昂
谢谢!!!也感谢其他的朋友
谢谢!结贴