意思是读写子类的属性。 Delphi中的例子: procedure TSampleComponent.LoadCompProperty(Reader: TReader); begin if Reader.ReadBoolean then MyCompProperty := Reader.ReadComponent(nil); end;procedure TSampleComponent.StoreCompProperty(Writer: TWriter);begin Writer.WriteBoolean(MyCompProperty <> nil); if MyCompProperty <> nil then Writer.WriteComponent(MyCompProperty); end;procedure TSampleComponent.DefineProperties(Filer: TFiler); function DoWrite: Boolean; begin if Filer.Ancestor <> nil then { check Ancestor for an inherited value } begin if TSampleComponent(Filer.Ancestor).MyCompProperty = nil then Result := MyCompProperty <> nil else if MyCompProperty = nil or TSampleComponent(Filer.Ancestor).MyCompProperty.Name <> MyCompProperty.Name then Result := True else Result := False; end else { no inherited value -- check for default (nil) value } Result := MyCompProperty <> nil; end; begin inherited; { allow base classes to define properties } Filer.DefineProperty('MyCompProperty', LoadCompProperty, StoreCompProperty, DoWrite); end;
Delphi中的例子:
procedure TSampleComponent.LoadCompProperty(Reader: TReader);
begin
if Reader.ReadBoolean then
MyCompProperty := Reader.ReadComponent(nil);
end;procedure TSampleComponent.StoreCompProperty(Writer: TWriter);begin
Writer.WriteBoolean(MyCompProperty <> nil);
if MyCompProperty <> nil then
Writer.WriteComponent(MyCompProperty);
end;procedure TSampleComponent.DefineProperties(Filer: TFiler); function DoWrite: Boolean;
begin
if Filer.Ancestor <> nil then { check Ancestor for an inherited value }
begin
if TSampleComponent(Filer.Ancestor).MyCompProperty = nil then
Result := MyCompProperty <> nil
else if MyCompProperty = nil or
TSampleComponent(Filer.Ancestor).MyCompProperty.Name <> MyCompProperty.Name then
Result := True else Result := False;
end
else { no inherited value -- check for default (nil) value }
Result := MyCompProperty <> nil;
end;
begin
inherited; { allow base classes to define properties }
Filer.DefineProperty('MyCompProperty', LoadCompProperty, StoreCompProperty, DoWrite);
end;
这句是什么意思呢?能解释下么?