溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Delphi全局變量帶來的問題

發(fā)布時間:2020-07-31 03:32:55 來源:網(wǎng)絡(luò) 閱讀:307 作者:alexanda2000 欄目:開發(fā)技術(shù)

最近在寫一個Delphi程序,想到一個問題,即Delphi為了方便使用的需要,自動創(chuàng)建了所有的窗體,并將這些窗體變量自動聲明為全局變量。想了一下,這會帶來一些問題:

1、窗體聲明為全局變量,可以隨時隨地可用,但也同時意味著,隨時會被修改和調(diào)用,調(diào)用關(guān)系復(fù)雜,且難以被追蹤。

2、不符合面對向象的要求。由于窗體全局變量的存在,在各個類的方法實現(xiàn)中,涉及到其它窗體時,代碼都是類似于 frmMain.XXX 、 frmAddInstance.XXX ,使用窗體變量進行直接調(diào)用。但這樣是不合理的,一個類的方法實現(xiàn),直接調(diào)用的是某一個具體對象的方法,而不是通過創(chuàng)建、組合、繼續(xù)的方式來實現(xiàn)代碼,不符合面對對象的精神。

如:TForm1的OnClick方法里,經(jīng)??吹介_發(fā)人員這樣寫:

procedure TForm1.OnClick(Sender:TObject);

begin

form1.Caption := 'abc';

form2.Visable := not form2.Visable;

end;

這里在一個類的實現(xiàn)方法里直接使用了form1這個全局窗體變量,雖然運行沒有問題,但如果TForm1創(chuàng)建了第二個實例呢,點擊第二個實例的窗體時,它的標題根本不會變,但是第一個實例反而改變了。這樣的代碼肯定是可笑的。如果亡羊補牢,應(yīng)該把from1改為self。這里對form2的引用也是類似,代碼實現(xiàn)引用了具體的全局實例而不是由自己創(chuàng)建或控制的對象,是不合理的。

Delphi的機制難以改變,暫時可以將每個窗體的全局變量看作是單例變量來使用,即不要嘗試去創(chuàng)建窗體的第二個實例。

3、Delphi創(chuàng)建的數(shù)據(jù)模塊,上面的組件全部都是可見的,雖然操作方便,但很容易引導(dǎo)開發(fā)人員直接去操作組件。更合理的方式是將這些操作封裝為模塊公開的方法,每個方法實現(xiàn)特定的業(yè)務(wù)邏輯,其它窗體通過這些方法(即廣義上的模塊接口)去操作,而不是直接操作組件,從而達到解耦的目的。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI