- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是德尔福的新手。在 TStrem 类的文档中,我读到它是一个抽象类。所以我认为当我尝试使用
创建它时编译器会出错stream := TStream.Create();
为什么不呢?
最佳答案
Delphi 语言实际上没有任何正式的抽象类概念。
确实可以将类定义为抽象类:
type
TMyClass = class abstract
end;
但是你可以很好地实例化这个类。事实上,Delphi 中的类抽象
是仅由长期废弃的 Delphi .net 编译器使用的功能。
抽象类的一个更有用的定义是包含抽象方法的定义。如果您尝试实例化这样的类,则会发出编译器警告。如果您愿意,可以通过编译器选项将这些警告升级为错误。
当文档将 TStream
称为抽象时,它实际上意味着它是“概念上”抽象的。事实上,它甚至没有任何抽象
方法,因此根据我上面的定义,它不是抽象的。
我真的不确定为什么TStream
不包含抽象方法。我建议 GetSize
、SetSize
、Read
、Write
和 Seek
应该真正被声明为抽象。我怀疑如果今天设计该类,那么它们将被声明为抽象,并且很可能它们不是出于历史原因。
实例化TStream
是缺乏Delphi RTL经验的程序员所犯的一个非常常见的错误。一旦错误犯了几次,通常就会吸取教训。不幸的是,系统没有提供简单的方法来标记此错误。每个新程序员都必须经历艰苦的学习。
关于德尔福tstream : strange behaviour on create,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44697836/
要移动 TStream 类中的“当前字节”指针,我们可以使用属性 Position(例如 MyStream.Position := 0)或使用 Seek 方法(例如 MyStream.Seek(0,
TStream类包含许多 WriteData 的重载其形式如下: function WriteData(const Buffer: Int32; Count: Longint): Longint; o
我正在尝试将字符串转换为 TStream。下面的代码在 CopyFrom 行上给出了“抽象错误”消息。我在这里遇到了困难,有什么办法可以解决这个问题吗? procedure StringToStrea
通过 Indy 发送 TMemoryStream 的最佳方式是什么? 目前我正在尝试: procedure TClientForm.IdTCPClient1Connected(Sender: TObj
这是从 Apache Edgent Documentation 中获取的代码 我不明白元组到底是什么。代码如下: public static void main(String[] args) thro
我正在从流中读取组件,并且希望能够指定 Owner 属性。 var TComponent : comp; stream.Seek(0, soFromBeginning); comp :=
我正在使用 Delphi 7 并使用 StringList,以 TStream 作为对象。 我的测试项目有一个列表框、一个备忘录和 2 个按钮(添加和删除)。 这是我到目前为止得到的: var L
我的 MySQL 数据库上有一个存储过程,带有 2 个 Blob 类型的 OUT 参数 我想通过 UniDAC 的 SP 组件将它们的值作为 TStream 获取,我已尝试使用此代码进行测试: SP
当我尝试运行以下简单代码序列时,收到Abstract Error 错误消息: type TForm1 = class(TForm) Image1: TImage; Button1:
我编写了一个 DataSnap 服务器方法,它返回一个 TStream 对象来传输文件。客户端应用程序调用该方法并正常读取流。我的问题是,在 TStream 对象可供读取之前,方法调用需要一段时间才能
我正在 Delphi XE2 中使用 TCP/IP 协议(protocol)开发 DataSnap 项目,该项目需要将二进制数据流作为方法参数传递到服务器。我遇到的问题是流内容似乎有大约 32 KB
我需要从 Stream 中读取数据并将读取的缓冲区放入 OleVariant (VarArray) 变量中。 var MemoryStream : TMemoryStream; Data : OleV
我正在尝试使用 TBlobStream 方法将附件数据从 IMAP 服务器插入到 MySQL 数据库。 procedure TForm1.Button1Click(Sender: TObject);
我使用 Delphi XE2 构建了一个 DataSnap REST 服务器,并添加了一个通过 TStream 上传文件的服务器方法: function TServerMethods.updateUp
我正在使用 C++Builder,并且正在尝试慢慢地将代码迁移到使用 C++ 标准库而不是 Delphi VCL。 VCL 有一个基于 TStream 类的流架构,我正在改用 std::stream。
我有一个 Delphi 10.1 Berlin Datasnap 服务器,它无法返回大于大约 260.000 字节的数据包(通过 TStream)。 我按照 Delphi 的 \Object Pasc
我正在尝试编写一个 Delphi 控制台应用程序,为其标准输入创建一个 TStream,并为其标准输出创建另一个 TStream。 (它将由主机应用程序启动,其输入和输出重定向到管道,并将二进制数据传
我编写了一个 DataSnap 服务器方法,它返回一个 TStream 对象来传输文件。客户端应用程序调用该方法并读取流来下载文件。服务器方法非常简单: function TServerMethods
如下面代码的Test2所示,TStringList被转换为TStream,然后TStream又被转换回TStringList。然而,在 Delphi 7 中 Test2 给出的结果与 Test1 相同
对于 TStringStream,使用其 Bytes 属性的 bytes 与使用 TStream.Read 提取的 bytes 不同。如下图: 使用TStream.Read提取的字节代表正确的数据。
我是一名优秀的程序员,十分优秀!