zoukankan      html  css  js  c++  java
  • Delphi 新语法之Helper

    技术交流,DH讲解.

    哈哈,好久没有写这个系列了.今天在看VCL源代码的时候,看见了这个.
    还是声明一下这个是在D7以后的版本才有的.谢谢,不要喷我!


    当我们想给一个类增加一个方法或者成员变量,但是这个类又被很多单元引用了,我们直接去该这个类,肯定是很不明智的,怎么办?
    对了,面向对象的话,我们可以继承一下不就OK了,的确可以.但是如果结构体呢?其实这个关键更像是为结构体准备的
    不过我这里想说一个helper关键字的用法.
    类助手 可以扩展一个类但是不用继承,而且在UML中是没有的.

    简单的语法:
    type
       助手类名 = class helper [(基类列表)] for 被扩展的类名
         成员变量列表
       end;
    
    我们可以看到很简单,就是class helper.当然这里我得说一下了,record也是可以的.谁叫record的外号叫做小类.
    
    我们对一个类可以定义多个助手类,但是扩展原类特定处代码的助手类只能有0个或者1个.


    来个简单的例子吧.
    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);
    End;
    Function TMyClassHelper.MyFunc: Integer; //覆盖原方法
    Begin
    .. .
    End;
    使用:
    Var
    X: TMyClass;
    Begin
    X:= TMyClass.Create;
    X.MyProc; // 调用TMyClass.MyProc
    X.HelloWorld; // 调用 TMyClassHelper.HelloWorld
    X.MyFunc; // 调用TMyClassHelper.MyFunc
    End.
    就是这么简单,希望大家能用到.

    今天就讲到这里,我是DH;

  • 相关阅读:
    占满屏幕的宽高,当把textarea换成其他标签的时候,怎么才能编辑?
    鼠标点击文本框后,里面的文字就消失或全选中
    jquery中选取兄弟节点的方法
    文本出现省略号
    滚动条的样式
    省略号的样式。
    input的placeholder在ie9下不兼容的结局办法。
    [CF1097D] Makoto and a Blackboard
    [CF552C] Vanya and Scales
    [CF1353E] K-periodic Garland
  • 原文地址:https://www.cnblogs.com/huangjacky/p/1619789.html
Copyright © 2011-2022 走看看