问题标签 [class-helpers]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
delphi - 是否可以对字符串类型使用两个记录助手?
我创建了这个助手,以便为该string
类型添加更多功能:
但是当我在我的代码中使用它时,输入TStringHelper
“System.StrUtils
退出”并且我不能使用它的功能。
两者有可能共存吗?
delphi - 如何使用类助手调用受保护的方法?
假设我们有一个类,其方法可能非常有用,但由于受保护范围而无法使用:
我知道两种使用这种方法的老式方法,都涉及继承和类型转换。两种方法都应该与基本案例 #1 和高级多态案例 #2 相同。
我想知道:
- 如何应用类助手的力量来达到相同的结果?
- 是否也可以使用类助手调用私有方法?
- 案例 #1 和案例 #2 之间会有什么区别,因为什么类帮助器扩大了类范围,而不是内部表示?
- 如何从类助手中重新引入的方法中调用原始方法而不冒递归的风险?
另外,请评论有关TIntroducer
不安全的评论。
delphi - 类助手语法中“祖先列表”的目的是什么?它记录在哪里?有没有使用示例?
所有文档版本,包括最新版本,都提供了以下类/记录帮助器语法:
它只解释了什么......
祖先列表是可选的。只能为类助手指定。
......并没有进一步讨论可怕的细节。文档主题的其余部分中的使用示例仅利用了ancestor list
可选的事实。我见过的所有EMBA的代码以及所有的第三方代码都没有使用这ancestor list
部分。
因此,标题中概述了我的问题:
ancestor list
类助手语法的目的是什么?- 它记录在哪里?
- 有没有使用示例?
delphi - 当类助手在范围内时如何调用原始类的代码?
我正在对改进的快速排序版本进行一些单元测试。
(希望)更快的版本是通过以下方式实现的:
我知道现在我可以将其重命名为Sort
intoSortNew
以进行测试,但在某些时候我必须将方法名称修复为sort
.
如果范围内有类助手,我如何调用原始方法?
有没有使用 rtti 或其他迂回方法的方法?
c++ - C++ 中的类助手
在 Delphi 中存在可以为给定类添加方法的类助手。
C++ 中是否有任何设计模式可以做到这一点?
delphi - 如何将属性添加到 TTabSheet 以便可以在设计时与 TPageControl 一起使用
我想将“MyProperty”添加到 TTabSheet 并在设计时使用它。但是,如果我对它进行子类化,我担心我还需要对 TPageControl 进行子类化,因为它在内部创建/管理 TTabSheets。
我相信这需要复制 TTabSheet 管理代码来引用 TMyTabSheet 而不是 TTabSheet,因为它需要调用 TMyTabSheet.create。当新版本的 Delphi 更新 TPageControl 并且我忘记更新 TMyPageControl 时,这感觉就像我会后悔的事情。
我也在研究“班级助手”作为另一种选择。
有人对如何最好地实现这一点有建议吗?
谢谢!
delphi - 如何在 Delphi 10.1 Berlin 中访问私有方法 TStreamReader.FillBuffer?
如何在 Delphi 10.1 Berlin 中访问私有方法 TStreamReader.FillBuffer,我们在 10.1 之前使用类助手完成了它 - 但建议的解决方案不起作用:
它失败只是因为 GetMethod 返回 NIL。任何想法为什么会失败?
编辑: 我确实想知道它为什么失败
delphi - 如何在文字上使用 TExtendedHelper?
与System.SysUtils.TShortIntHelper
(和其他人)我可以写:
将数字格式化5
为string
. 也有System.SysUtls.TExtendedHelper
,但我无法编译:
E2018:需要记录、对象或类类型
其他不工作的版本:
5.0.ToString()
(1.0+5.1).toString()
(5+0.).toString()
(说 E2029: ')' 预期但 ']' 找到)
实际工作的版本:
(1+5.1).toString()
(1.1+1+5.1).toString()
5.9e0.toString()
如果声明了扩展值const
,它也不起作用:
但是有了它的定义q : extended = 5.5;
就可以了。所以,我想知道为什么编译器会这样。