我晕,Delphi 7 以后增加了这么多有用的语法,我都不知道。真是越学越觉得自己浅薄,自己所作的Delphi项目所用的知识还不够Delphi知识储备体系的十分之一,更别说Delphi还在继续发展。
-----------------------------------------------------------------------
自Delphi 7以来的Delphi
2009测试版新语法特性
by
eGust
===========================================
New
Delphi language features since Delphi
7
-------------------------------------------
这部分对从Delphi
7到Delphi 2007的新语法特性语法进行一个简介,主要内容来自于CodeGear官方网站D2007的 "What‘s New"
中对新语法特性的介绍的部分:
http://edn.embarcadero.com/cn/article/34324
1.内联函数(Inlining)(似乎不需要,有几个项目还差那一点点执行时间呢,都是时间更重要,项目做的做不出来更重要)
D7中的inline关键字作为保留字并不会对编译器产生实际作用,在2009中此关键字起到内嵌到代码中起到实际作用。语法如下:
function
foo: Integer;
inline;
内部函数/过程也可以使用,但在D2009测试版中,类方法的内部函数使用inline后不认Self指针;类的子过程/子函数,也可以使用inline关键字,但没有实际效果,且虚方法/继承方法(virtual/override)不能使用。
2.重载运算符(Operator
Overloading)(最讨厌运算符重载,语法上看上去简单好用,其实除了数学领域哪里都用不上,函数解决一切!)
可以重载部分运算符,如
、-、类型转换等,在D2006只支持到record,但从2007开始支持到Class,以下示例修改自官网:
TMyClass
=
class
//
Addition of two operands of type
TMyClass
class
operator Add(a, b: TMyClass):
TMyClass;
//
Subtraction of type
TMyClass
class
operator Subtract(a, b: TMyClass):
TMyclass;
//
Implicit conversion of an Integer to type
TMyClass
class
operator Implicit(a: Integer):
TMyClass;
//
Implicit conversion of TMyClass to
Integer
class
operator Implicit(a: TMyClass):
Integer;
//
Explicit conversion of a Double to
TMyClass
class
operator Explicit(a: Double):
TMyClass;
end;
class
operator TMyClass.Add(a, b: TMyClass):
TMyClass;
begin
//...
end;
var
x,
y:
TMyClass
begin
x
:= 12; // Implicit conversion from an
Integer
y
:= x x; // Calls TMyClass.Add(a, b: TMyClass):
TMyClass
end;
3.类助手(Class
Helpers)(看上去很牛,但要想想哪里需要这个功能,会用以后也许很强大,因为可以轻易给TObject和TComponent加功能,然后所有的Delphi类都能使用!开发人员可以对做VCL全局的修改,扩展成自己的类库,但不必修改VCL源码本身!!)
Helper是对原Class的扩展,是我们在不修改原类的基础上增加类方法,并加入原类的空间中。在Delphi中,对对象的调用实际上采用了两个步骤,首先是把对象地址放入eax寄存器中,然后call类方法,所以如果不使用继承类增加数据的话,用父类调用继承类的方法是没问题的,所以其实这样的方法在D7中也可以使用,但却很麻烦。所以Class
Helper起到的就是这个作用,在Class
Helper中可以增加的就是与实例无关的内容,所以任何需要增加实例Size的活VMT的功能不能声明,例如变量、虚方法等,但只占用类空间的没关系, 如class
var。在应用上我们可以通过这种方法方便的给VCL一类控件加上某个属性。
TFoo
= class helper for
TControl
private
function
GetA:
Integer;
public
class
var X:
Integer;
procedure
MSG(var Message: TMessage); message
WM_MYMESSAGE;
procedure
FooProc;
property
A: Integer read
GetA;
end;
//
...
procedure
TForm1.Foofoo;
begin
FooProc;
// TControl -> TWinControl -> TScrollingWinControl-> TCustomForm ->
TForm -> TFrom1: Call
TFoo.FooProc
end;
4.strict关键字(Keyword
“strict”)(一般般,控制那么严格真的有用吗?没这些语法,Delphi也已经很强大了,为所欲为。我们要的是产品和结果,还有时间,不是中间的理论或者代码如何考究,那个没用)
Delphi 7以来的Delphi 2009测试版新语法特性,布布扣,bubuko.com
Delphi 7以来的Delphi 2009测试版新语法特性
原文:http://www.cnblogs.com/findumars/p/3659144.html