Delphi 如何防止在派生形式中修改设计时组件

Delphi 如何防止在派生形式中修改设计时组件,delphi,delphi-xe2,Delphi,Delphi Xe2,我已经定义了一个基本VCL表单类,其上有一个(非可视的)designtime组件,该组件包含样式集合 我想防止开发人员(和我自己)更改从我的基本表单派生的表单中的样式。用C#术语来说,我希望组件以基本VCL形式密封 我怎样才能做到这一点 另一方面:我从未理解Delphi中窗体上的designtime组件声明。。有点公共,但不放在类声明的公共部分。有人能解释一下原因吗?好吧,简短的回答你不能。如果您真的需要它,我建议您在运行时创建该组件并将其设置为私有。如果您使用的是GExpert(),那么可以使

我已经定义了一个基本VCL表单类,其上有一个(非可视的)designtime组件,该组件包含样式集合

我想防止开发人员(和我自己)更改从我的基本表单派生的表单中的样式。用C#术语来说,我希望组件以基本VCL形式密封

我怎样才能做到这一点


另一方面:我从未理解Delphi中窗体上的designtime组件声明。。有点公共,但不放在类声明的公共部分。有人能解释一下原因吗?

好吧,简短的回答你不能。如果您真的需要它,我建议您在运行时创建该组件并将其设置为私有。如果您使用的是GExpert(),那么可以使用“Components to Code”命令来获取所需的代码。如果你需要更多的细节,请分享你的DFM文件,我会在这里发布相应的代码

至于您的旁注,组件声明为已发布。见引文

如果成员的声明显示时没有其自身的可见性 说明符,该成员与前面的成员具有相同的可见性 信息技术类声明开头没有 默认情况下,如果类为 在{$M+}状态下编译,或从 {$M+}州;否则,这些成员是公开的

NB
TForm
是使用
{$M+}
指令编译的
TPersistent
的后代


PS发布的声明是
TComponent.SetName
所必需的(实际上
TComponent.SetReference
)当您修改组件
Name
属性时,它应该将组件引用分配到相应的字段。

自律应用程序通常会完成此任务。如果自律是唯一需要的。。。那么就不需要私人、受保护和公共财产了,是吗。。。。。。。。。不过,可见性级别的作用更大。它们还提供接口是什么的文档。至于你的问题,我真的无法想象你当前的代码。在你的情况下,C#sealed类似物是如何实现的?密封类不能用作基类。可以通过测试
Self
类并确保只有基类可以使用setter属性来“保护”已发布的setter。