首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

Delphi控件求解解决方案

2012-05-23 
Delphi控件求解如何不利用继承机制,给现有的控件增加一个属性比如给TEdit增加一个XXX:String这样的属性,但

Delphi控件求解
如何不利用继承机制,给现有的控件增加一个属性
比如
给TEdit增加一个XXX:String这样的属性,但是不要从TEdit继承下来一个类的这种方法

公司的一道面试题,同为Delphi开发人员,能力不够且特别好奇,故上来请大神们赐教

[解决办法]
不能继承,那就改源码

1.在private下面写一个变量FXXX:String;(没有private就添加进去)

2.在private下写一个方法procedure SetXXX(const Value: string);
再在TEdit类中实现此方法
procedure TEdit.SetXXX(const Value: string);
begin
FXXX:=Value;
end;

3.在protected下面写上此属性的读取方法(read,write)
property XXX: String read FXXX write SetXXX;

4.在published把属性XXX公布出来:property XXX;

[解决办法]
现在很多编程语言都提供一个叫帮助类(class helper)的机制,delphi的新版里面也有,举例如下:

Delphi(Pascal) code
type    TMyClass = class       procedure MyProc;       function  MyFunc: Integer;    end;     ...     procedure TMyClass.MyProc;    var X: Integer;    begin       X := MyFunc;    end;     function TMyClass.MyFunc: Integer;    begin        ...    end;  ...  type    TMyClassHelper = class helper for TMyClass      procedure HelloWorld;      function MyFunc: Integer;    end;     ...     procedure TMyClassHelper.HelloWorld;    begin       Writeln(Self.ClassName); // Self refers to TMyClass type, not TMyClassHelper    end;     function TMyClassHelper.MyFunc: Integer;    begin      ...    end;  ...  var   X: TMyClass; begin   X := TMyClass.Create;   X.MyProc;    // Calls TMyClass.MyProc   X.HelloWorld; // Calls TMyClassHelper.HelloWorld   X.MyFunc;    // Calls TMyClassHelper.MyFunc
[解决办法]
Delphi(Pascal) code
一般属性(访问对象的接口)是服务于字段的。1.在private下面写一个字段FXXX:String;2.在private下写一个方法procedure SetXXX(const Value: string);  3.在published把属性在设计时可以设计:property XXX: String read FXXX write SetXXX;
[解决办法]
Delphi(Pascal) code
一般属性(访问对象的接口)是服务于字段的。1.在private下面写一个字段FXXX:String;2.在private下写一个方法procedure SetXXX(const Value: string);  3.在published把属性在设计时可以设计:property XXX: String read FXXX write SetXXX; 

热点排行