delphi overload问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi overload问题相关的知识,希望对你有一定的参考价值。

我知道怎麼使用
为什麼要两个函数(过程)的函数(过程)名一样参数不一样?
我不用一样也可以啊,具体为什麼要用到呢

其实效果是一样的,用了overload后程序内部也是把它存储为两个不同的函数指针,目的是方便我们语义上好处理,比如两个数相加,那函数名都可以取一样的,
function add(a ,b:string);overload;
function add(a,b:integer);overload;
如果没有OverLoad功能,你只能写成两个或多个函数名了,strAdd,intAdd了

个人喜好而以,我就不喜欢想取什么函数名,能统一一个就用Overload了。
参考技术A 主要的时,实现多态,根据方法传的参数不同,系统自动调用相应的方法。 参考技术B 节约虚拟函数表空间

转: Delphi的OverRideOverLoad和Virtual方法

http://blog.csdn.net/ckli/article/details/2201418

override 重写 也叫覆盖
1.方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。
如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。
子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。
如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。

2. Delphi 的函数覆盖(Override)与重载(overload)
而Delphi 就是用override 关键字来说明函数覆盖的。被覆盖的函数必须是虚(virtual)的,或者是动态(dynamic)的,也就是说该函数在声明时应该包含这两个指示字中的一个,比如:

procedure Draw; virtual;
在需要覆盖的时候,只需要在子类中用override 指示字重新声明一下就可以了。
procedure Draw; override3.virtual 虚类型
  dynamic 动态
  overload 重载
  override 重写 
4.★★★关于方法定义关键字的说明:
    如果在过程定义声明时包括了的关键字的含义:
    static 表示是静态方法;静态方法是方法的缺省类型,不能被覆盖;
    virtual 表示是虚拟方法;
    dynamic 表示是动态方法;
      这两类方法的共同点是都可以被覆盖(override),区别仅在于运行时调用方法时的派发机制,virtual方法为执行速度做了优化,
而dynamic方法则为代码大小做了优化;经常被覆盖的方法应该定义为virtual方法;
message 表示是消息处理方法;在关键字message后面的值指明了这个方法要响应的消息;用消息处理方法来响应Windows的消息,这样就不用直接来调用它; override 表示是覆盖方法;要求祖先类中必须有该方法的定义,并且参数的顺序和类型及返值的类型必须匹配;
    用于扩展祖先类中的该方法而不是取代它(如不调用祖先类中的该方法则等同于取代);拓展类有inherited即可继承,inherited可以写任意行表示什么时候执行父类的代码;
overload 表示是重载方法;用于一个类中有许多同名的方法带着不同的参数表的情形;(属性的读写方法不能被重载); abstract 表示是抽象方法;是没有实现的方法,并且必须是virtual或dynamic方法,即在abstract前面必须有virtual或dynamic关键字,其实现部分在派生类中;如 procedure DoSomething; virtual; abstract; reintroduce表示是重新声明的方法;用于方法的名称与祖先类中的某个方法名称相同的情形; 5.virtualdynamic定义的虚函数,都是为了子类override用的,   只不过它们的实现不一样 vitrual 占用的空间大点,但速度快些。dynamci正好相反. stdcall是一种调用方式,标明了参数入stack的顺序和清除的方式,具体可看 Delphi的帮助.

 

以上是关于delphi overload问题的主要内容,如果未能解决你的问题,请参考以下文章

delphi中的类啥情况下使用overload

overloading和overriding,两者有啥区别和联系?

[TypeScript] Overload a Function with TypeScript’s Overload Signatures

Overload和Override的区别

Overload和Override的区别,Overload 的方法是否可以改变返回值类型?

Overload