如何在Delphi中覆盖Class属性getter

如何在Delphi中覆盖Class属性getter,第1张

概述我定义了一个基类和一些派生类,它们永远不会被实例化.它们只包含类函数和两个类属性. 问题是Delphi要求使用static关键字en声明类属性的属性get方法,因此不能将其声明为virtual,因此我可以在派生类中覆盖它. 所以这段代码会导致编译错误: TQuantity = class(TObject) protected class function GetID: stri 我定义了一个基类和一些派生类,它们永远不会被实例化.它们只包含类函数和两个类属性.

问题是Delphi要求使用static关键字en声明类属性的属性get方法,因此不能将其声明为virtual,因此我可以在派生类中覆盖它.

所以这段代码会导致编译错误:

TQuantity = class(TObject)    protected      class function GetID: string; virtual; //Error: [DCC Error] E2355 Class property accessor must be a class fIEld or class static method      class function Getname: string; virtual;    public      class property ID: string read GetID;      class property name: string read Getname;    end;    TQuantitySpeed = class(TQuantity)    protected      class function GetID: string; overrIDe;      class function Getname: string; overrIDe;    end;

所以问题是:如何定义一个类属性,其结果值可以在派生类中重写?

使用Delphi XE2,Update4.

更新:
解决了DavID Heffernan使用函数代替属性的建议:

TQuantity = class(TObject)    public      class function ID: string; virtual;      class function name: string; virtual;    end;    TQuantitySpeed = class(TQuantity)    protected      class function ID: string; overrIDe;      class function name: string; overrIDe;    end;
解决方法

How do you define a class property whose resulting value can be overrIDden in derived classes?

你不能,正如编译器错误消息所表明的那样:

E2355 Class property accessor must be a class fIEld or class static method

类字段在通过继承关联的两个类之间共享.所以不能用于多态.而类静态方法也不能提供多态行为.

使用虚拟类函数而不是类属性.

总结

以上是内存溢出为你收集整理的如何在Delphi中覆盖Class属性getter全部内容,希望文章能够帮你解决如何在Delphi中覆盖Class属性getter所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1243136.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存