from:

http://edn.embarcadero.com/cn/article/34324

Language and Compiler Features Since Delphi 7

 
Inlining Routines can now be marked with the inline directive.  This tells the compiler that, instead of actually calling the routine, it should emit code that includes the routine at the call site.
Operator Overloading

Delphi allows certain functions, or operators, to be overloaded within record declarations

TMyClass = class
class operator Add(a, b: TMyClass): TMyClass; // Addition of two operands of type TMyClass
class operator Subtract(a, b: TMyClass): TMyclass; // Subtraction of type TMyClass
class operator Implicit(a: Integer): TMyClass; // Implicit conversion of an Integer to type TMyClass
class operator Implicit(a: TMyClass): Integer; // Implicit conversion of TMyClass to Integer
class operator Explicit(a: Double): TMyClass; // Explicit conversion of a Double to TMyClass
end; // Example implementation of Add class operator
TMyClass.Add(a, b: TMyClass): TMyClass;
begin
...
end; var
x, y: TMyClassbegin
x := 12; // Implicit conversion from an Integer
y := x + x; // Calls TMyClass.Add(a, b: TMyClass): TMyClass
b := b + 100; // Calls TMyClass.Add(b, TMyClass.Implicit(100))
end;
Class Helpers

A class helper is a type that - when associated with another class - introduces additional method names and properties which may be used in the context of the associated class (or its descendants). Class helpers are a way to extend a class without using inheritance. A class helper simply introduces a wider scope for the compiler to use when resolving identifiers. When you declare a class helper, you state the helper name, and the name of the class you are going to extend with the helper. You can use the class helper any place where you can legally use the extended class. The compiler's resolution scope then becomes the original class, plus the class helper. Class helpers provide a way to extend a class, but they should not be viewed as a design tool to be used when developing new code. They should be used solely for their intended purpose, which is language and platform RTL binding.

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 end;
strict private The private keyword actually creates a " friendship" relationship between classes in the same unit.  The strict private declaration creates a true private field, not viewable by any other class, not even classes in the same unit.
strict protected Similar to the strict private declaration, strict protectedcreates a true protected member, visible only to the declaring class and its descendents.
Records with Methods

In addition to fields, records now may have properties and methods (including constructors), class properties, class methods, class fields, and nested types.

type
TMyRecord = record
type
TInnerColorType = Integer;
var
Red: Integer;
class var
Blue: Integer;
procedure printRed();
constructor Create(val: Integer);
property RedProperty: TInnerColorType read Red write Red;
class property BlueProp: TInnerColorType read Blue write Blue;
end; constructor TMyRecord.Create(val: Integer);
begin
Red := val;
end; procedure TMyRecord.printRed;
begin
writeln('Red: ', Red);
end;
class abstract

Classes, and not just methods, can be declared as abstract.

type
TAbstractClass = class abstract
procedure SomeProcedure;
end;
class sealed Classes marked as sealed cannot be inherited from.

type
TAbstractClass = class sealed
procedure SomeProcedure;
end;
class const Classes can now have class constants -- a constant value associated with the class itself and not an instance of the class.

type
TClassWithConstant = class
public
const SomeConst = 'This is a class constant';
end; procedure TForm1.FormCreate(Sender: TObject);
begin
ShowMessage(TClassWithConstant.SomeConst);
end;
class type A class can now contain a type declaration that is usable only within that class.

type
TClassWithClassType = class
private
type
TRecordWithinAClass = record
SomeField: string;
end;
public class var
RecordWithinAClass: TRecordWithinAClass;
end;
...
procedure TForm1.FormCreate(Sender: TObject);
begin
TClassWithClassType.RecordWithinAClass.SomeField := 'This is a field of a class type declaration';
ShowMessage(TClassWithClassType.RecordWithinAClass.SomeField);
end;
class var A class can also have a class variable, applicable only to the class and not an instance of the class. See "class type" for an example.
class property A class can have a class property, which is a property that applies only to the class reference and not to an instance of a class.  The accessors for the class property must be either class methods or class variables. See the example in "static class methods" below.
nested classes Type declarations can be nested within class declarations. They present a way to keep conceptually related types together, and to avoid name collisions.

type
TOuterClass = class
strict private
MyField: Integer;
public
type
TInnerClass = class
public
MyInnerField: Integer;
procedure InnerProc;
end;
procedure OuterProc;
end; procedure TOuterClass.TInnerClass.InnerProc;
begin
...
end;
final methods A virtual method that you override can now be marked final, preventing derived classes from overriding that method.

TAbstractClass = classabstract
public
procedure Bar; virtual;
end; TSealedClass = classsealed(TAbstractClass)
public
procedure Bar; override;
end; TFinalMethodClass = class(TAbstractClass)
public
procedure Bar; override; final;
end;
sealed methods Classes marked as sealed cannot be descended from. See the example in 'final methods'.
static class methods Classes can have static class methods -- i.e. methods that can be called from a class type. Class static methods can be accessed without an object reference. Unlike ordinary class methods, class static methods have no Self parameter at all. They also cannot access any instance members. (They still have access to class fields, class properties, and class methods.) Also unlike class methods, class static methods cannot be declared virtual.

type
TMyClass = class
strict private
class var
FX: Integer;
strict protected // Note: accessors for class properties must be declared class static. class function GetX: Integer; static;
class procedure SetX(val: Integer); static;
public
class property X: Integer read GetX write SetX;
class procedure StatProc(s: String); static;
end; TMyClass.X := 17;
TMyClass.StatProc('Hello');
for-in loop Delphi 2007 for Win32 supports for-element-in-collection style iteration over containers. The following container iteration patterns are recognized by the compiler:

  for Element in ArrayExpr do Stmt;
for Element in StringExpr do Stmt;
for Element in SetExpr do Stmt;
for Element in CollectionExpr do Stmt;

Language and Compiler Features Since Delphi 7的更多相关文章

  1. Massive Collection Of Design Patterns, Frameworks, Components, And Language Features For Delphi

    Developer beNative over on GitHub has a project called Concepts which is a massive collection of Del ...

  2. Advanced Features of Delphi DLLs

    http://www.delphisources.ru/pages/faq/master-delphi-7/content/LiB0104.html Beside this introductory ...

  3. Calling 64-bit assembly language functions lodged inside the Delphi source code

    Code: http://www.atelierweb.com/calling-64-bit-assembly-language-functions-lodged-inside-the-delphi- ...

  4. an excellent capability of C# language and compiler

    Sometimes you want to write code that works for different primitive types, and as C# doesn't support ...

  5. Delphi Language Overview

    Delphi is a high-level, compiled, strongly typed language that supports structured and object-orient ...

  6. The CompilerVersion constant identifies the internal version number of the Delphi compiler.

    http://delphi.wikia.com/wiki/CompilerVersion_Constant The CompilerVersion constant identifies the in ...

  7. Delphi CompilerVersion Constant / Compiler Conditional Defines

    http://delphi.wikia.com/wiki/CompilerVersion_Constant The CompilerVersion constant identifies the in ...

  8. Delphi 和 C++Builder 2014年及以后技术路线图

    RAD Studio, Delphi 和 C++Builder 2014年及以后技术路线图 By: Embarcadero News 内容源自Embarcadero新闻组,本人水平有限,欢迎各位高人修 ...

  9. Delphi XE5教程3:实例程序

    内容源自Delphi XE5 UPDATE 2官方帮助<Delphi Reference>,本人水平有限,欢迎各位高人修正相关错误! 也欢迎各位加入到Delphi学习资料汉化中来,有兴趣者 ...

随机推荐

  1. 大数据开发实战:Stream SQL实时开发一

    1.流计算SQL原理和架构 流计算SQL通常是一个类SQL的声明式语言,主要用于对流式数据(Streams)的持续性查询,目的是在常见流计算平台和框架(如Storm.Spark Streaming.F ...

  2. Nginx限制某个IP同一时间段的访问次数和请求数示例代码

    nginx可以通过ngx_http_limit_conn_module和ngx_http_limit_req_module配置来限制ip在同一时间段的访问次数. ngx_http_limit_conn ...

  3. hadoop集群默认配置和常用配置

    http://www.cnblogs.com/ggjucheng/archive/2012/04/17/2454590.html 获取默认配置 配置hadoop,主要是配置core-site.xml, ...

  4. Java提高篇(转)

    http://www.cnblogs.com/mfrank/category/1118474.html Day1 抽象类 Day2 接口 Day3 抽象类与接口的比较 Day4 Java中的回调 Da ...

  5. 主成分分析(PCA)原理及推导

    原文:http://blog.csdn.net/zhongkejingwang/article/details/42264479 什么是PCA? 在数据挖掘或者图像处理等领域经常会用到主成分分析,这样 ...

  6. Git创建分支/GIT提交分支

    git clone xxx.git cd fwspp-react git init touch README.md git add README.md git commit -m "add ...

  7. 在centos7中离线方式安装mysql5.7

    第一步:下载mysql 在Linux终端使用wget命令下载网络资源:(可以先下好) wget http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-5.7.17 ...

  8. C++ 推断一棵二叉树是否对称

    一棵二叉树对称,就是说它假设以根为轴,翻转过去一样.例如以下图所看到的,以虚线为轴.把左边翻转到右边,各顶点及顶点中的值一一相应. watermark/2/text/aHR0cDovL2Jsb2cuY ...

  9. 用Github pages搭建自己制作的网页

    本文固定链接http://blog.csdn.net/pspgbhu/article/details/51205264 本人自学前端一个多月,写个几个网页想要用来应聘,网上搜各种搭建站点的方法.发现不 ...

  10. 算法笔记_205:第五届蓝桥杯软件类决赛真题(C语言B组)

    目录 1 年龄巧合 2 出栈次序 3 信号匹配 4 生物芯片 5 Log大侠 6 殖民地   前言:以下代码仅供参考,若有错误欢迎指正哦~ 1 年龄巧合 小明和他的表弟一起去看电影,有人问他们的年龄. ...