我有一个继承自TFileStream的类和一个继承自TMemoryStream的类.两者都实现与读取数据完全相同的功能,例如:
TCustomFileStream = class (TFileStream)
function ReadByte: byte;
function ReadWord: word;
function ReadWordBE: word;
function ReadDWord: longword;
function ReadDWordBE: longword;
function ReadString(Length: integer): string;
function ReadBlockName: string;
etc
Run Code Online (Sandbox Code Playgroud)
当我想编写一个可以将任何类型的流作为参数的函数时,我必须使用TStream:
function DoStuff(SourceStream: TStream);
Run Code Online (Sandbox Code Playgroud)
这当然意味着我无法使用自定义功能.什么是解决这个问题的最好方法?理想情况下,我希望能够有一个兼容FileStream或MemoryStream的Tstream兼容类,所以我可以做这样的事情,如果流是FileStream或MemoryStream则无关紧要:
function DoStuff(SourceStream: TMyCustomStream);
begin
data := SourceStream.ReadDWord;
otherData := SourceStream.Read(Buffer, 20);
end;
Run Code Online (Sandbox Code Playgroud)