问题标签 [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.

0 投票
10 回答
1130 浏览

delphi - Class Helpers 应该用于开发新代码吗?

为了将 VCL/RTL 映射到 .NET 对象层次结构,Delphi 8 引入了 Class Helpers。它们允许将方法注入现有类,而无需覆盖该类或修改原始类。后来的 Delphi 版本发现类助手得到了改进,它们被移植到 Win32。

在帮助中它说“它们不应该被视为开发新代码时使用的设计工具。”

Class Helpers 违反了传统的 OOP,但我认为这并不会使它们成为一件坏事。这个警告是否合理?

开发新代码时应该使用类助手吗?

您在开发新代码时使用它们吗?

为什么或者为什么不?

根据Malcolm 的评论:新代码意味着日常应用程序开发,其中您有一些 3rd 方库、一些现有代码,然后是您正在编写的代码。

0 投票
3 回答
5176 浏览

delphi - 泛型类的类助手?

我正在使用 Delphi 2009。是否可以为泛型类(即 TQueue )编写类助手。显而易见的

不工作,也不

0 投票
1 回答
1392 浏览

delphi - 在运行时使用 RTTI 在 Delphi 中查找所有类助手?

Delphi 2010 中的扩展 RTTI 是否提供了一种在运行时列出定义的类和记录助手的方法?

据我所知,当为一个类定义多个类助手时, Delphi不会显示提示或警告,类助手检测可能是“质量保证”中的一个有用例程。

ps 当然我知道我永远不应该在没有源代码的情况下使用第三方组件或库,这将使 grep 类助手变得容易。

0 投票
3 回答
405 浏览

delphi - 如何在一个类中封装不同的类以保持其独特的方法?(delphi中的多重继承?)

我目前正在重写一个免费的教育数字电路模拟器,以增加其特性的惯性。我的问题是如何将事件分派给原始类,为它们添加预详细说明。我有这样的事情:

现在这意味着 ContFunc 如我所愿调用 C2.Func1,专门化 300 多个继承自 TC1 的组件的行为。

但是现在我必须添加一些特殊操作(每次调用 Func1 时,对于来自 TC1 的所有组件后代都相等,并且如果我必须调用 TC2-n.Func1 则在该操作期间进行选择(在更改祖先 TC1 的某些属性之后。是有没有办法在不改变 TC1 的所有后代的情况下干净地做到这一点?我可以像这样使用辅助类(不推荐使用吗?):

如果我添加 TH,当 TContainer 调用 Func1 时,会调用谁?它像我希望的那样调用 TC2.Func1 而不是 TH.Func1?有没有一种方法可以覆盖后代方法 Func1 而无需为任何单个类编写辅助类(它们将执行所有相同的操作,意味着完全相同的代码)?可以从 TH 调用 TC2-n 的 300 个后代函数 Func1 吗?

换句话说,我试图找到一种方法来通过 Tcontainer 调用 c1.Func1; 来获得这样的调用:

调用 TC2.Func1 的 NewFunc1(对所有 TC1 后代均等)(对于 TC1 的任何后代均不同)。

任何人都可以提出一种方法来做到这一点?

0 投票
1 回答
250 浏览

c++ - 班级和班级助手

我是 C++ 新手,想问一下类助手。

好吧,我有一堂课,我在其他文件中有什么类助手。为此,我应该使用命名空间,但我不能多次#include 这个文件(因为重新定义)。

在其他类中制作类助手的正确方法是什么?我应该为此使用静态类吗?

UPD:好的,我得到了最合适的部分,但我应该为类助手使用命名空间还是静态类?(如果使用命名空间,我真的没有看到使用类的任何好处,但我是新手,所以我不确定)。UPD2:哦。有了一个这样的类,我可以为助手类创建子类。

0 投票
2 回答
4954 浏览

delphi - 访问 Delphi 类的严格保护属性?

我需要访问一个受严格保护的属性,因为我需要创建一个验证(基于此属性的值)以避免出现错误。(我没有具有此属性的第三方类的源代码)只有我有类(接口)和 dcu 的定义(所以我无法更改属性可见性)。问题是存在访问严格受保护属性的方法吗?(我真的阅读了Hallvard Vassbotn 博客,但我没有找到关于这个特定主题的任何内容。)

0 投票
2 回答
957 浏览

delphi - 如何使用类的地址和变量的偏移量访问类 var 的值?

我需要使用他的实例和变量的偏移量访问一个类的严格私有类 var值。

到目前为止试过这个,检查这个示例类

如您所见,函数 GetFooValue 仅在 foo 变量未像类 var 那样声明时才起作用。

问题是我必须如何修改 GetFooValue才能获得Foo声明时的值strict private class var Foo: Integer;

0 投票
2 回答
6529 浏览

delphi - 如何使用类助手访问类的严格私有成员?

这是一个后续问题:如何隐藏对象的受保护过程?
(我对整个班级助手的概念有点模糊)

假设我有一个像这样的类:

我知道如果我有源代码,可以通过在同一单元中添加后代类来访问私有方法。

我有 2 个问题:
- 我如何聘请班级助手来访问strict private会员?
- 我可以在单独的单元中使用类助手来访问(严格)私有成员吗?

0 投票
3 回答
891 浏览

delphi - 有什么方法可以知道一个对象是在类助手中创建还是销毁?

我几乎没有组件类帮助器来创建子组件,例如弹出菜单,以便在运行时访问这些子组件,我创建了一个单例 TDictionary。

我的问题是我怎么知道所有者组件正在被销毁以从 TDictionary 中删除子组件?

如果它是一个专门的组件,我将它添加到析构函数中,但我不能在类帮助器中添加构造函数和/或析构函数。

编辑 - 解决方案

我创建了一个接受 TObject 作为参数的基础对象,使用时,必须手动完成删除操作。

然后我从它继承了一个新类,重写了只接受 TComponent 的方法。这就是代码的相关部分现在的样子:

使用这种方法,我可以解决我的实际需求,并让稍后轻松扩展。

0 投票
1 回答
2311 浏览

delphi - Delphi 类助手 RTTI GetMethod

假设我有一个示例类助手

我执行以下操作:

这按预期工作。

但是我怎样才能使用 RTTI 来调用辅助方法呢?以下似乎不起作用,GetMethod返回零。

那么 RTTI 不适用于类助手中定义的方法吗?有没有办法解决?

谢谢。