속성 목록이있는 기본 클래스가 있습니다. 그런 다음 하위 클래스를 만들고 다른 속성을 추가하십시오. 구성 요소를 파일에 저장해야합니다. 그러나 자식 구성 요소를 저장하는 대신 부모가 기록됩니다.WriteComponent 메서드를 사용하여 TComponent 자손을 작성하는 방법은 무엇입니까?
다음은 문제를 설명하는 exaple입니다.
MyComp1 = class(TComponent)
strict private
FS: string;
FI: Integer;
published
property S: string read FS write FS;
property I: Integer read FI write FI;
end;
MyComp2 = class(MyComp1)
strict private
FS2: string;
published
property S2: string read FS2 write FS2;
end;
procedure SaveIt;
var
MS: TMemoryStream;
C1: MyComp1;
C2: MyComp2;
begin
MS := TMemoryStream.Create;
try
C1 := MyComp1.Create(nil);
C1.S := 'Hallo, World!';
C1.I := 100500;
C2 := MyComp2(C1);
C2.S2 := 'Second string';
MS.WriteComponent(C2);
MS.Position := 0;
MS.SaveToFile('C:\test.dat');
finally
MS.Free;
end;
end;
상세 사항 :
나는 시간이 확대되고있는 기능을 가지고있다. 그래서 TComponent (MyComp1이라고 부름)의 기본 클래스와이 유형의 변수 (MyComp : MyComp1)를 만들었습니다. 나는 기능을 확장되면 나는 이전 버전 (MyComp2 = 클래스 (MyComp1))에서 하위 클래스 새 필요한 속성을 추가하고 내가 파일에 있지만 자식 속성으로 mycomp 구성 요소를 저장해야합니다 그런 다음이
MyComp2(MyComp).S2 := 'Second string';
처럼 그 값을 할당을 만들 . 나는이
MyComp := MyComp2.Create(nil)
처럼 생성 할 수 있지만 파일로 저장하는 MyComp2
로 타입 캐스팅 만 MyComp1
코드는 잠재적으로 힙을 손상하고 어떤 경우에 잘못된 것입니다. 당신의 진정한 질문은 무엇입니까? – kludg
그것은 부모로 선언 된 자손 구성 요소를 저장하는 방법입니다. – Yuriy
'C2 : = MyComp2 (C1) '을 형변환하는 것이 단지 오류인지 알고 계십니까? 시도하고있는 것은 작동하지 않아야하며 액세스 위반 가능성이 있습니다. – kludg