delphi – 如何避免重复转换为后代接口类型?
发布时间:2020-12-15 04:16:11 所属栏目:大数据 来源:网络整理
导读:我正在制作一个框架(仅供内部使用),该框架在3 o 4 delphi数据库CRUD应用程序中具有通用代码. mi框架的一个共同目标是TContext, TContext = class (IContext) function DB: IDatabase; function CurrentSettings: ISettings; .. end; 传递给许多其他对象的初
我正在制作一个框架(仅供内部使用),该框架在3 o 4 delphi数据库CRUD应用程序中具有通用代码.
mi框架的一个共同目标是TContext, TContext = class (IContext) function DB: IDatabase; function CurrentSettings: ISettings; .. end; 传递给许多其他对象的初始化方法.例子(这将是应用程序代码): TCustomer.Initialize(Context: IContext) TProjectList.Initialize(Context: IContext) .. 每个应用程序都有一些特定的上下文函数(只能从应用程序代码中调用): IApp1Context = interface (IContext) procedure DoSomethingSpecificToApp1; procedure DoOtherThing; .. end; 所以当我创建一个Context时,我创建一个IApp1Context,并将它发送到初始化方法..从框架代码一切都很好,问题是从应用程序代码我不断从IContext转换为IApp1Context来访问特定的 (FContext as IApp1Context).DoSomethingSpecificToApp1 (FContext as IApp1Context).DoOtherThing; .. 事情显而易见,但在我看来并不好读.也许我夸张了;这种情况有一种巧妙的设计技巧,我不知道吗? 解决方法
使用临时变量.在方法开始时分配一次,然后在需要的地方使用它.
var AppContext: IApp1Context; begin AppContext := FContext as IApp1Context; AppContext.DoSomethingSpecificToApp1; AppContext.DoOtherThing; end; 或者,因为看起来您的IContext对象是对象的字段,所以将IApp1Context变量设置为同一对象的字段.它甚至可以替换IContext字段,因为IApp1Context已经公开了IContext所做的一切. procedure TCustomer.Initialize(const Context: IContext); begin FContext := Context; FAppContext := FContext as IApp1Context; // ... end; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |