상속 구현하는 방법 :이 개 가능한 자식 클래스 수 있습니다 내가 부모 클래스가
TEmailBaseAccount = class
Connected: boolean;
setting: TEmailAccountSettings;
folders: TEmailAccountFolders;
procedure Connect; virtual; abstract;
end;
TEmailIMAPAccount = class(TEmailBaseAccount)
IdIMAP4: TIdIMAP4;
OpenSSLHandler: TIdSSLIOHandlerSocketOpenSSL;
procedure Connect; override;
end;
TlEmailPOP3Account = class(TEmailBaseAccount)
IdPOP3: TIdIPOP3;
OpenSSLHandler: TIdSSLIOHandlerSocketOpenSSL;
procedure Connect; override;
end;
나는 일반적인 TList를 사용하여 전자 메일 계정 목록을 유지하고있어 :
TEmailAccountList = class(TList<TEmailBaseAccount>)
procedure SaveToStream(Stream: TStream);
procedure LoadFromStream(Stream: TStream);
constructor Create(AOwner: TObject);
destructor Destroy;
end;
을과 다음 코드를 사용하여 목록에 이메일 계정을 추가하십시오.
procedure TEmailAccountList.LoadFromStream(Stream: TStream);
var
a, c: Integer;
e: TEmailBaseAccount;
begin
c := ReadStreamInt(Stream);
for a := 0 to c - 1 do
begin
e := TEmailBaseAccount.Create(FOwnerEmailEngine);
e.LoadFromStream(Stream);
Add(e);
end;
end;
procedure TEmailAccountList.SaveToStream(Stream: TStream);
var
a, c: Integer;
e: TEmailBaseAccount;
begin
c := Count;
WriteStreamInt(Stream, c);
for a := 0 to Count - 1 do
Items[a].SaveToStream(Stream);
end;
런타임시 나는 th 전자 같은 것을 사용하여 자식 클래스의 2 개 종류 :
if account is TEmailIMAPAccount then
...
else if account is TEmailPOP3Account then
...
내 원래의 클래스 선언과 TList를 선언이 요구 사항에 적합하지 않습니다 확신합니다. 이 시나리오에서 어떤 변화가 필요합니까?
TIA.
나는 이것을 정확하게하고있다. 하지만 어딘가에 문제가 생기는 이유는 나중에 올바른 유형을 얻지 못하기 때문입니다. 나는 지금 당장 문제를 풀려고 노력하고 있으며, 만약 그 해결책이 나를 벗어나면 더 많은 것을 올릴 것이다. 감사! –
각 항목이 지속되는 방법에 대해 Q에 아무것도 없습니다. 열거 형을 사용하면 문제가 없지만 파일에 저장해야합니다. 이것이 핵심 포인트입니다. –
문제는 내 코드가 너무 복잡하여 코드의 일부만 게시하고 누구나 이해할 수 있기를 기대하기 어렵다는 것입니다. 문제를 보려면 830 라인의 전체 유닛을 볼 필요가 있습니다. –