D2005的新特性

2021-04-01 22:30:24 字數 4555 閱讀 4945

這兩天就要開學了。之前幾天太忙了,沒時間寫blog,今天就寫寫delphi 2005的新特性,for…in…語句

在delphi2005中,新增加了乙個非常有用的語句,這個特性在其他很多語言中都有,就是著名的foreach迴圈,越來越多的人發現這個有用的東西了,也越來越多的語言在編譯器層面直接加入了對這個的支援了。

delphi的編譯器在集合型別,陣列型別,字串型別以及提供了getenumerator方法的類提供了for…in…的直接支援。

集合型別:

以下為引用:

var chars:set of char;

c:char;

begin

chars:=[『a』..』e』,』0』..』9』];

for c in chars do

showmessage(c);

end;

陣列型別:

以下為引用:

type

tnumber=(null,eins,zwei,drei,vier,funf,sechs,sieben,acht,neun);

const

numbertoenglish:array[tnumber] of string=('zero','one','two','three','four','five','six','seven','eight','nine');

var n:tnumber;

begin

for n in [low(tnumber)..high(tnumber)] do

showmessagefmt('%s=%s',[getenumname(typeinfo(tnumber),ord(n)),numbertoenglish[n]]);

end;

字串型別:

以下為引用:

var s:string;c:char;

begin

s:=』hello world』;

for c in s do

showmessage(s);

end;

對於提供了getenumerator方法的類,getenumerator返回的乙個類例項必須包含如下定義:

以下為引用:

function getcurrent: 型別名;

function movenext: boolean;

property current: 型別名 read getcurrent;

對於是否從哪個繼承下來並沒有硬性的規定,直接從tobject繼承下來都可以。

使用例子:

以下為引用:

tsolarisenumerator=class;

tsolaris=class

private

flist:tlist;

public

constructor create;

destructor destroy;override;

procedure createplanet(const name:string);

function getenumerator:tsolarisenumerator;

end;

tplanet=class

private

fname:string;

public

constructor create(const name:string);

property name:string read fname write fname;

end;

tsolarisenumerator=class

private

flist:tlist;

findex:integer;

public

function getcurrent: tplanet;

constructor create(asolaris:tsolaris);

function movenext: boolean;

property current:tplanet read getcurrent;

end;

類實現:

以下為引用:

constructor tsolaris.create;

begin

flist:=tlist.create;

end;

destructor tsolaris.destroy;

var ptr:pointer;

begin

for ptr in flist do

tobject(ptr).free;

freeandnil(flist);

inherited;

end;

procedure tsolaris.createplanet(const name:string);

begin

flist.add(tplanet.create(name));

end;

function tsolaris.getenumerator:tsolarisenumerator;

begin

result:=tsolarisenumerator.create(self);

end;

constructor tplanet.create(const name:string);

begin

fname:=name;

end;

constructor tsolarisenumerator.create(asolaris:tsolaris);

begin

inherited create;

findex := -1;

flist := asolaris.flist;

end;

function tsolarisenumerator.getcurrent: tplanet;

begin

result := flist[findex];

end;

function tsolarisenumerator.movenext: boolean;

begin

result := findex < flist.count - 1;

if result then

inc(findex);

end;

測試:

以下為引用:

const

planets:array[1..9] of string=('mercury','venus','earth','mars','jupiter','saturn','uranus','neptune','pluto');

var solaris:tsolaris;

name:string;

planet:tplanet;

begin

solaris:=tsolaris.create;

for name in planets do

solaris.createplanet(name);

for planet in solaris do

showmessage(planet.name);

solaris.free ;

end;

這裡的**:

以下為引用:

for planet in solaris do

showmessage(planet.name);

實際上可以理解被分解成:

以下為引用:

with solaris.getenumerator do

begin

try

while movenext do

begin

planet:=current;

showmessage(planet.name );

end;

finally

free;

end;

end;

在vcl中,已經有如下型別已經提供了getenumerator方法:

以下為引用:

tlist 

tcollection 

tstrings 

tinte***celist 

tcomponent 

tmenuitem 

tcustomactionlist 

tfields 

tlistitems 

ttreenodes 

t*******

SQL Server 2005新特性 五

三 查詢通知sql server 2005引入了對sql server 查詢的通知支援。你可以使用這一功能來傳送乙個命令到sql server,並且要求當其後執行的同樣命令產生不同的結果時,sql server生成乙個通知。這一功能是通過從屬物件檢測到基礎資料的改變來實現的。可用通過多種客戶端api...

VS2005新特性列表

1.收集自msdn vs2005新增 1.1 ide設定 更多,並且可以匯入匯出 1.2 任務列表 增加對列進行排序,在任意行中顯示多行文字等功能 1.3 快捷鍵 個人覺得非常有用 f7 檢視 shift f7 檢視介面 ctrl ctrl shift 上次 下次 游標位置 ctrl 轉到相匹配的大...

SQL Server 2005新特性之感悟

自從microsoft公司推出sql server 2005以後,我還沒真正用過它的新特性,microsoft公司推出新軟體也太快了,目前sql server 2008也推出了,沒辦法,趕不上形式啊!今天我就介紹一下sql server 2005的新特性,和我使用的感受,我會根據一些抽象名詞和個別新...