提升后代类中方法可见性的最佳方法

2024-02-17

详细说明这个问题的最佳方法是举一个我正在尝试做的事情的例子......

我定义一个“基类”:

TMyBaseClass = class(TPersistent)
protected
  procedure Foo(const AValue: String); virtual;
  // more methods here (many more in fact)
end;

我现在定义一个后代类:

TMyDescendantClass = class(TMyBaseClass)
public
  procedure Foo(const AValue: String); override;
  // etc. for all desired methods I wish to elevate into Public
end;

这里的问题是,我必须重新定义 TMyDescendantClass 的方法“Foo”,以将调用沿链传递到 TMyBaseClass:

procedure TMyDescendantClass.Foo(const AValue: String);
begin
  inherited;
end;

这是浪费空间!我想知道是否有人知道有什么方法可以消除重新实现方法和 acl“继承”的需要。

理想的解决方案如下所示:

TMyDescendantClass = class(TMyBaseClass)
public
  procedure Foo(const AValue: String); elevated;
  // etc. for all desired methods
end;

显然这是假设的,我知道 Delphi 语言中不存在关键字“elevated”。是否有一个我不知道的具有相同效果的关键字?

Thanks!


没有这样的关键字。你可以平凡地通过使用新的可见性级别重新声明属性来更改属性的可见性 http://docwiki.embarcadero.com/RADStudio/en/Properties#Property_Overrides_and_Redeclarations。但对于方法来说,没有任何类似的东西。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

提升后代类中方法可见性的最佳方法 的相关文章

  • Delphi - 如何将通用参数传递给接受 const 参数数组的函数

    我有一个 基类 其中包含一个 函数 该函数接受 const 数组 类型的参数 如下所示 type TBaseClass class TObject public procedure NotifyAll const AParams array
  • 如何安装DBMonitor

    这可能是一个非常简单的问题 但就是这样 我刚刚更新了 Firebird 的 DevArt DBExpress 驱动程序的许可证 帮助文件说我可以使用他们的免费软件 DBMonitor 应用程序 但由于我使用的是 D2006 所以我必须使用以
  • 是否有适用于 >= Delphi 2007 的 Delphi 混淆器

    我曾经使用 Pythia 来混淆我的 D6 程序 但 Pythia 似乎不再适用于我的 D2007 这是 Pythia 的链接 自 2007 年初以来没有更新 http www the interweb com serendipity in
  • 有什么办法可以将2个数组添加到一个数组中吗?

    有没有一种简单通用的方法可以将两个数组添加到一个数组中 在下面的情况下 不可能简单地使用C A B陈述 我想避免每次都为它制定算法 TPerson record Birthday Tdate Name Surname string end
  • 如何更改 Chromium 组件的默认背景颜色?

    I use TChromium http code google com p delphichromiumembedded 我分配AWebPageAsString这是一个带有灰色背景颜色的静态 HTML 页面 FBrowser TChrom
  • 如何从具有管理员权限的应用程序接收键盘输入到非管理员应用程序?

    我编写了一个应用程序 该应用程序具有覆盖类型的窗口 可以通过热键显示和隐藏该窗口 而另一个应用程序具有焦点 所述另一个应用程序是一个以管理员权限运行的 DirectX 游戏 我已经尝试了 3 种可能的解决方案 以便在其他应用程序中按下我的热
  • VCL.位图到 FMX.位图

    我在网上找到了这段代码 但 FMX Bitmap 没有扫描线 是否可以以某种方式将 VCL TBitmap 复制或绘制到 FMX Bitmap IFDEF MSWINDOWS type TBitmap FMX Types TBitmap T
  • Delphi线程死锁

    我有时会在销毁某些线程时遇到死锁问题 我尝试过调试该问题 但在 IDE 中调试时似乎从未存在死锁 可能是因为 IDE 中的事件速度较低 问题 当应用程序启动时 主线程会创建多个线程 线程始终处于活动状态并与主线程同步 完全没有问题 当应用程
  • 如何在滚动框上创建缓慢的滚动效果?

    我喜欢在滚动框中平移图像后创建平滑的减慢滚动效果 就像平移地图一样谷歌地图 http maps google com 我不确定它是什么类型 但行为完全相同 当快速移动地图时 当您释放鼠标时它不会立即停止 而是开始减慢速度 有什么想法 组件
  • 在运行时按需更改组件类

    我的问题与这里的想法类似 替换delphi中的组件类 https stackoverflow com q 4685863 937125 但我需要改变一个specific按需组件类 这是一些伪演示代码 unit Unit1 TForm1 cl
  • Firemonkey 编辑/组合自动完成/打字时自动建议

    实施方式是什么Autocomplete or Autosuggest适用于 Windows Android 平台以及 MacOS 和 iOS 的 Delphi Firemonkey Example 当用户在 Google 搜索框中输入文本时
  • 开源 Delphi 包可使用哪些项目选项?

    我写了一些 Delphi 代码 想在 GitHub 上分享 所有代码都根据需要包含在运行时和设计时包中 每个项目有许多项目选项需要设置 输出目录 搜索路径 编译选项等 我设法找到了一些适合我的情况的默认选项 但阅读此处的其他问答很明显有多个
  • 使用 OLE 和 Delphi 提高 Word 文档中搜索替换的性能

    经过一些实验 我最终得到了以下代码来在 MSWord 中执行搜索和替换 此代码在页眉和页脚中也能完美运行 包括首页或奇数 偶数页的页眉和 或页脚不同的情况 问题是我需要打电话MSWordSearchAndReplaceInAllDocume
  • 如何遍历任意给定集合中的枚举?

    我有很多枚举类型 它们与相应的集合相结合 例如 type TMyEnum meOne meTwo meThree TMyEnums set of TMyEnum 我正在尝试提出一组可以运行的函数any枚举集 而不是为每个枚举编写单独的函数
  • Delphi 返回 TList 时出错

    我做了一个非常简单的应用程序 但我有一个我真的无法理解的问题 看一下这个基本代码 unit Unit1 interface uses Winapi Windows Winapi Messages System SysUtils System
  • Delphi 2009 IDE结构视图折叠功能

    现在有谁知道折叠 Delphi 2009 IDE 结构视图中的所有项目吗 我不知道折叠所有项目 这使我很难从视图中找到我的课程 Thanks 选择根节点 类 并按数字键盘上的 除号 那会让一切崩溃 然后按数字键盘上的 加号 键 第一级将展开
  • delphi中如何实现多重继承?

    我正在对一个旧库进行完全重写 我不确定如何处理这种情况 为了便于理解 大家都欢呼自行车类比 我有以下课程 TBike 自行车本身 TBikeWheel 自行车的一个轮子 TBikeWheelFront and TBikeWheelBack
  • 为什么 {$ifopt FINITEFLOAT ON} 无法编译?

    我有这样的构造 ifopt FINITEFLOAT ON message FINITEFLOAT option ON else message FINITEFLOAT option OFF endif 在我的源代码中 它不会编译 这一定是一
  • 将数据从一个数据集结构移动到另一个数据集结构的更快方法(在 TDatasetProvider 中)

    我有一个自定义的 TDatasetProvider 它允许为其提供的任何数据创建新字段 因此 假设您在原始数据集上获得了以下字段 客户ID Name Age 您需要使用显示位图在 DBGrid 上选择它 好吧 你可以 因为我的 DSP 可以
  • 如何调试仅在应用程序关闭时发生的崩溃? (德尔福)

    因此 经过最近的一些更改 我们发现我们最古老的应用程序之一有时会在关闭时崩溃 这会以 运行时错误 216 消息的形式或来自 Windows 错误报告的消息的形式表明应用程序已停止工作 该应用程序已经发出OutputDebugString 每

随机推荐

  • JavaScript 数组解构赋值和空值

    我正在使用外部服务getListOfItemsFromServiceA它接受一个id 用户 并返回与该用户关联的 5 个项目 正好 5 个 的列表 我使用数组解构赋值来设置那些工作正常的项目的值 如下所示 仅是一个示例 var item1
  • Automake 变量来整理 Makefile.am

    我有一个目录 src 包含所有源文件 bin 用来在运行 make 命令后存储所有二进制文件 该目录如下所示 BuildDirectory src bin configure Makefile am configure ac 现在在 Mak
  • 注意:未定义索引:变量

    我正在尝试构建以下表格
  • 在Java中,当文件被其他线程锁定时,有没有办法读取该文件?

    因此 我使用以下命令在文件上创建锁定 以便我可以专门对其进行编辑 File file new File filename channel new RandomAccessFile file rw getChannel lock channe
  • HTML5 视频 - 暂停加载/部分加载

    有没有办法预加载视频的一部分 而不是整个视频 我注意到有一个 暂停 事件 表明视频预计不会下载 直到有进一步指示 但我不确定如何触发此事件 我的目标是预加载视频的一部分而不占用所有用户的带宽 Thanks 您可以使用 XHR 预取任何 UR
  • Java SafeVarargs 注释,是否存在标准或最佳实践?

    我最近接触到了java SafeVarargs注解 谷歌搜索 Java 中的可变参数函数不安全的原因让我很困惑 堆中毒 擦除类型 所以我想知道一些事情 是什么使得可变参数 Java 函数在 SafeVarargs有什么意义 最好以深入示例的
  • 自定义包名称 cxf-codegen-plugin

    想象一下这个场景 我有一个名称空间为 a b c 的 wsdl 文件 它导入另一个名称空间为 m n o 的 wsdl 文件 不幸的是 它们都定义了相同的 ComplexTypes XYZ 现在 当我使用 cxf codegen plugi
  • grep IP 地址和开放端口 nmap

    我正在尝试使此脚本使用 nmap 的开放端口来 grep IP 地址 但我无法以正确的方式执行此操作 我有这样的事情 nmap 192 168 0 0 24 sU p 44555 grep oP 0 9 1 3 3 0 9 1 3 gt o
  • 支持 CORS 的服务器发送事件

    我在用ServiceStack 中的服务器发送事件 https github com ServiceStack ServiceStack wiki Server Events我需要允许它跨来源使用 我已经设置了ServiceStackCor
  • C++:有意限制 CPU 使用

    在我的公司 我们经常在 CPU 压力下测试 USB 和 FireWire 设备的性能 我们运行一个测试代码来加载 CPU 它经常用于非常简单的非正式测试 以了解我们的设备性能会发生什么变化 我查看了相关代码 它是一个简单的循环 它增加计数器
  • Python正则表达式处理不同类型的日期

    我正在尝试编写一个正则表达式来识别一些日期 我正在处理的字符串是 string these are just rubbish 11 2 2222 24 3 1695 194475 12 13 1111 32 11 2000 these ar
  • 如何在调用 gnuplot 时保持 PyQt5 响应?

    我正在尝试使用 Python GUI 和 gnuplot 创建绘图 我正在用 Python 生成代码并将其发送到 gnuplot 这基本上适用于将数据传输到 gnuplot 但是 缺点 Python 程序将被阻止 直到您关闭 gnuplot
  • CL.exe 退出代码

    有人知道我在哪里可以获得 CL exe 退出代码列表及其含义吗 谷歌在这方面不是我的朋友 我得到的特定代码 4 似乎也没有得到任何点击 虽然代码 4 的含义很好 但我更喜欢一个实际上列出所有代码的网站 无证 但进程返回 Windows 错误
  • QSharedPointer::isNull() 和 operator!() 之间的区别

    在 Qt 文档中我们读到 bool QSharedPointer operator const Returns true if this object is null This function is suitable for use in
  • 其余暴露的 spring-data 的全局异常处理

    使用 spring data rest 公开存储库我想覆盖默认的异常处理 阅读文档在我看来最好的方法是使用 ControllerAdvice 注释类 ControllerAdvice class GlobalControllerExcept
  • 使用 post 时未定义索引

    我在 POST 变量上收到未定义的索引错误 IE POST 主机名 我知道为什么我会得到它们 但是有没有办法将 php 和表单保存在同一个文件中并且不会出现这些错误 h1 Please enter your database informa
  • 为什么要调用移出对象的析构函数?

    考虑下面的代码 struct foo std string id int main std vector
  • async-await 的延续爆发 - 行为不同?

    我有一个 winform 代码 单击按钮后运行 void button1 Click object sender EventArgs e AAA async Task BBB int delay await Task Delay TimeS
  • 在spark中,是否可以重用DataFrame的执行计划以将其应用于不同的数据源

    我有一个有点复杂的管道 pyspark 需要 20 分钟才能制定执行计划 由于我必须使用不同的数据帧 作为源 多次执行相同的管道 我想知道是否有任何选项可以避免每次都构建执行计划 构建一次执行计划并将其与不同的源数据重用 有一种方法可以满足
  • 提升后代类中方法可见性的最佳方法

    详细说明这个问题的最佳方法是举一个我正在尝试做的事情的例子 我定义一个 基类 TMyBaseClass class TPersistent protected procedure Foo const AValue String virtua