请问MyFont := Font和MyFont.Assign(Font)有什么不同?(50分)

  • 主题发起人 主题发起人 chcw
  • 开始时间 开始时间
没区别,前一种写法被属性设置函数重定义为 Assign.

Controls.Pas

property Font: TFont read FFont write SetFont stored IsFontStored;

procedure TControl.SetFont(Value: TFont);
begin
FFont.Assign(Value);
end;
 
你所说的是对控件而言,那如下语句有何区别:

var
MyFont: TFont;
begin
MyFont := Form.Font;
end;

var
MyFont: TFont;
begin
MyFont.Assign(Font);
end;

 
对属性来说,向Font赋值会映射到SetFont调用。对于一般的对象,由于一个TFont变量实际
上是一个内存指针,所以MyFont=AnotherFont是把两个指针指向了同一个Font对象,而Assign
则是把一个Font的属性复制到另外一个Font,内存中有两个TFont的内容。
 
第一个例子使 MyFont 指向 Form.Font。
第二个例子会出错,因为 MyFont 是空指针,还没有实体。Create 后再 Assigh 的情形
就如楼上所说。
 
一样!!

:= 是用assign实现的
 
对象可以说是指针,
:=,是对对象指针赋值
Assign是copy另外一个对象的属性,如对象私有的Integer,Pointer,String and otherinfo,

怎么说是一样的呢?
 
》:= 是用assign实现的
此种说法,一般情况下是错误的。
 
后退
顶部