在面向對象的設計中,我們經常會談到“重構”,而重構之中有個叫合並方法的,就是將多個方法干的事類似,或者說,方法體的長向很像,那麼,我們需要去考慮,將它們進行抽象!
原來的代碼:
AddOpreation( a, sum = ( i = (a < b ? a : b); i <= (a > b ? a : b); i+++= AddInvolutionOpreation( a, sum = ( i = (a < b ? a : b); i <= (a > b ? a : b); i+++= i *
可以看到這兩個方法的方法體基本相同 ,只是在累加時第一個是原數累加,第二個方法是原數的乘方作累加,對於上面的代碼,我們可以進行再次抽象,將不相同
的代碼邏輯提出來,我們知道.net 3.5有了Action和Func兩個委托,事實上,這兩個委托是微軟為我們封裝好的,原來就是因為它們常用,所以,人家直接給封裝好了,這一點,是值得我們去學習的,有人說,微軟的東西升級快,但我要說的是,它的升級不是語言本身的升級,而是為了讓開發人員更方便的使用它,讓開發人員
的代碼寫出來更可讀,讓代碼的藝術性更強,這是我想說的。
下面是把變化的部分抽象之後的結果,看代碼:
BothIntegerOpreation(Func<, > func, a, sum = ( i = (a < b ? a : b); i <= (a > b ? a : b); i+++=
而在調用的時間,我們將具體的實現邏輯以參數的形式傳遞進來,有人說,委托用不到,但我想說,那是你對委托還不夠了解!
Func<, > funcAdd = (a) => { a; }; res1 = BothIntegerOpreation(funcAdd, , res2 = BothIntegerOpreation((a) => { a * a; }, , ); Console.WriteLine(res1.ToString() + res2.ToString());
結果如下: