Language and Compiler Features Since Delphi 7

New Delphi language features since Delphi 7

By: Nick Hodges

Abstract: See many of the major new language features in Delphi released after the Delphi 7 version

Language and Compiler Features Since Delphi 7

InliningRoutines 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 = 
             operator Add(a, b: TMyClass): TMyClass; 
             operator Subtract(a, b: TMyClass): TMyclass; 
             operator Implicit(a: Integer): TMyClass; 
             operator Implicit(a: TMyClass): Integer; 
             operator Explicit(a: Double): TMyClass; 
            ;
            
            TMyClass.Add(a, b: TMyClass): TMyClass;
            
            ...
            ;
            
            x, y: TMyClassbegin
            x := 12; 
            y := x + x; 
            b := b + 100; 
            ;
            
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.


            TMyClass = 
             MyProc;
              MyFunc: Integer;
            ;
            ...
             TMyClass.MyProc;
            
            X: Integer;
            
            X := MyFunc;
            ;
             TMyClass.MyFunc: Integer;
            
            ...
            ;
            ...
            
            TMyClassHelper =  helper  TMyClass
             HelloWorld;
             MyFunc: Integer;
            ;
            ...
             TMyClassHelper.HelloWorld;
            
            WriteLn(Self.ClassName); 
            ;
             TMyClassHelper.MyFunc: Integer;
            
            ...
            ;
            ...
            
            X: TMyClass;
            
            X := TMyClass.Create;
            X.MyProc;    
            X.HelloWorld; 
            X.MyFunc; 
            ;
            
strict privateThe 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 protectedSimilar 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. 


            TMyRecord = 
            
            TInnerColorType = Integer;
            
            Red: Integer;
             
            Blue: Integer;
             printRed();
             Create(val: Integer);
             RedProperty: TInnerColorType  Red  Red;
              BlueProp: TInnerColorType  Blue  Blue;
            ;
             TMyRecord.Create(val: Integer);
            
            Red := val;
            ;
             TMyRecord.printRed;
            
            writeln(, Red);
            ;
            
class abstract

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


            TAbstractClass =  
             SomeProcedure;
            ;
            
class sealedClasses marked as sealed cannot be inherited from.

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

            TClassWithConstant = 
            
             SomeConst = ;
            ;
             TForm1.FormCreate(Sender: TObject);
            
            ShowMessage(TClassWithConstant.SomeConst);
            ;
            
class typeA class can now contain a type declaration that is usable only within that class.

            TClassWithClassType = 
            
            
            TRecordWithinAClass = 
            SomeField: ;
            ;
            
             
            RecordWithinAClass: TRecordWithinAClass;
            ;
            ...
             TForm1.FormCreate(Sender: TObject);
            
            TClassWithClassType.RecordWithinAClass.SomeField := ;
            ShowMessage(TClassWithClassType.RecordWithinAClass.SomeField);
            ;
            
class varA 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 propertyA 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 classesType declarations can be nested within class declarations. They present a way to keep conceptually related types together, and to avoid name collisions.

            TOuterClass = 
            strict 
            MyField: Integer;
            
            
            TInnerClass = 
            
            MyInnerField: Integer;
             InnerProc;
            ;
             OuterProc;
            ;
             TOuterClass.TInnerClass.InnerProc;
            
            ...
            ;
            
final methodsA virtual method that you override can now be marked final, preventing derived classes from overriding that method.
TAbstractClass = classabstract
            
             Bar; ;
            ;
            TSealedClass = classsealed(TAbstractClass)
            
             Bar; ;
            ;
            TFinalMethodClass = (TAbstractClass)
            
             Bar; ; ;
            ;
            
sealed methodsClasses marked as sealed cannot be descended from. See the example in 'final methods'.
static class methodsClasses 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.

            TMyClass = 
            strict 
             
            FX: Integer;
            strict 
            
              GetX: Integer; ;
              SetX(val: Integer); ;
            
              X: Integer  GetX  SetX;
              StatProc(s: ); ;
            ;
            TMyClass.X := 17;
            TMyClass.StatProc();
            
for-in loopDelphi 2007 for Win32 supports for-element-in-collection style iteration over containers. The following container iteration patterns are recognized by the compiler:
   Element  ArrayExpr  Stmt;
             Element  StringExpr  Stmt;
             Element  SetExpr  Stmt;
             Element  CollectionExpr  Stmt;
            

转载于:https://www.cnblogs.com/Phoenix-Rock/archive/2007/06/29/800350.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值