從oo角度看with的使用

2021-08-25 07:52:48 字數 1482 閱讀 5643

乙個同事維護

delphi

**的時候發現原來

的軟體內有很多

with

。過多的

with

讓**難以除錯。 引入

with

的本意在於節省重複出現的物件名。比如說,如果有這樣的呼叫:

function foo ()

begin

objecta.prop1 = "a";

objecta.prop2 ="b";

objecta.run();

end那麼可以採用

with

讓**顯得簡潔:

with objecta do

begin

prop1 ="a";

prop2 = "b";

run();

end;

在這樣的情況下,使用

with

無可厚非。因為這樣的**確實簡潔,並且並不影響**的可讀性。

問題是有些

with

用的太過頭了。最典型的是

with

巢狀with

,並且乙個

with

內有多個

property

和method

的呼叫,很難看出那個屬性是哪個物件的。這樣就使用的過度了。

和delphi

不同,在

c#內根本就不支援

with

。和with

類似的using

也只是為了

dispose

的目的,而不是為了**更加簡潔。那麼在

c#內,遇到類似的**要如何做呢?

其實上面的例子**內,隱隱的躲藏著乙個設計問題:就是**的分工並不合理。**的全部工作由函式

foo和

objecta

來承擔。在

foo內大量的引用物件

objecta,

這是一種職責不清晰的跡象:說明

foo做了很多本來屬於

objecta

的工作。

如果把這些工作分配有

objecta

來完成,那麼**應該是這樣的:

class a

foo()

begin

prop1 ="a";

prop2 = "b";

run();

end而呼叫方

foo這樣:

function foo()

begin

objecta.foo()

end自然的,既然所有的**呼叫都在

classa

內部發生,那麼本來天經地義應該使用

with

的場合,就在職責清晰的過程中,自然的變得並無必要了。

with

並非絕對不可應用,也不是所有的**都必須清晰職責,只要不影響閱讀和使用,**質量並不下降的情況下,

with

也是可以用的。

從彙編角度看引用

引用型別到底是什麼?它和指標有什麼關係?它本身占用記憶體空間嗎?帶著這些疑問,我們來進行分析。先看 include include using namespace std void main 通過彙編檢視 如下 9 int x 1 00401048 mov dword ptr ebp 4 1 10 ...

從辯證的角度看產品

從辯證的角度看產品 然而,當我們用我們自身的思維角度去看待一款產品時,往往可能由於對產品接觸的時間太少,或者是使用到功能的不全面,導致我們對一款產品的認識只能達到乙個有限的程度,這往往是不可避免的。同樣的,當我們要去開發一款產品,往往可能由於對產品真正需求的不確定,或者是考慮的不夠周全,導致我們希望...

從彙編的角度看棧

大家都知道,棧區是儲存函式,區域性變數的一塊記憶體區域。那麼讓我們從彙編的角度,來看看函式的執行過程。首先,當我們使用pushl將資料入棧時,棧頂會移動,以容納新增加的值。實際上,我們能不斷將值入棧,棧會在記憶體中保持向下增長,知道存放 或資料的地方。那麼,我們如何知道棧頂位址呢?棧暫存器 esp總...