- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要我的一些表单类实现相同的功能。
(我已经放弃了将此函数添加到通用锚定表单的想法,因为我不想添加一个对我的大多数表单都无用的函数。)
所以...我考虑使用接口(interface)。
IMyInterface = interface
procedure ShowHello();
end;
var
MyForm : TMyForm;
MyInterface : IMyInterface;
begin
MyForm := TMyForm.Create(Self);
MyInterface := MyForm;
//...
end;
在这样的简单情况下,它可以正常工作,但我的应用程序使用动态包,并且我使用“GetClass”函数来获取表单类。我尝试如下:
var
MyForm : TForm;
MyInterface : IMyInterface;
begin
MyForm := TForm(GetClass('TMyForm').Create());
MyInterface := MyForm;
end;
它会导致“类型不兼容:‘IMyInterface’和‘TForm’”错误。有没有办法使用接口(interface)来实现我的目标,或者尝试其他方法会更好?
最佳答案
使用Supports
检查接口(interface)是否实现的函数。
示例:
var
MyForm : TForm;
MyInterface : IMyInterface;
begin
MyForm := TFormClass(GetClass('TMyForm')).Create(...);
if Supports(MyForm, IMyInterface, MyInterface) then
begin
MyInterface.ShowHello;
end;
end;
您需要为您的接口(interface)声明 GUID。否则 Supports
将不起作用。所以接口(interface)声明应该是这样的:
IMyInterface = interface
['{052E7D55-B633-4256-9084-37D797B01BB4}']
procedure ShowHello();
end;
关于delphi - 如何从 TClass 创建的对象中获取接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39041385/
我正在尝试做这样的事情: function CreateIfForm ( const nClass : TClass ) : TForm; begin if not ( nClass is TFo
遇到问题,其中 MyObj.classnameis(TMyClass.classname) 为 true 并且 TMyClass(MyObj) 有效,但 (MyObj as TMyclass).doS
我正在尝试创建一个通用的“更新表达式构建器”——一个可以传递的对象,用于指示需要为哪些字段分配什么值。我所做的是: public class UpdateExpression : Dictionary
我对抽象类和接口(interface)具有相同签名方法的这种情况感到困惑。派生类中会有多少个定义?调用将如何解决? public abstract class AbClass { public
我需要我的一些表单类实现相同的功能。 (我已经放弃了将此函数添加到通用锚定表单的想法,因为我不想添加一个对我的大多数表单都无用的函数。) 所以...我考虑使用接口(interface)。 IMyInt
我有以下方法,使用“经典”bcc32 编译器可以很好地编译,但无法使用 Rad Studio 10 Clang 编译器进行编译。 TPersistentClass & __fastcall TServ
我是一名优秀的程序员,十分优秀!