1. 程式人生 > >.net framework 3.5的分部方法

.net framework 3.5的分部方法

 

早上看.net framework 3.5的分部方法這個特性。例子如下,第一個類為定義類,第二、第三個類為實現類。

None.gifpublic partial class AI
ExpandedBlockStart.gif    
{
InBlock.gif        
publicvoid Active()
ExpandedSubBlockStart.gif        
{
InBlock.gif            
this.Run();
InBlock.gif            
this.Jump(); 
ExpandedSubBlockEnd.gif         }

InBlock.gif 
InBlock.gif        partial 
void Run();
InBlock.gif 
InBlock.gif        partial 
void Jump();
ExpandedBlockEnd.gif     }

None.gif 
None.gif    
public partial class AI
ExpandedBlockStart.gif    
{
InBlock.gif        partial 
void Run()
ExpandedSubBlockStart.gif
        
{
InBlock.gif            Console.WriteLine(
"我在跑");
ExpandedSubBlockEnd.gif        }

ExpandedBlockEnd.gif    }

None.gif 
None.gif    
public partial class AI
ExpandedBlockStart.gif    
{
InBlock.gif        partial 
void Jump()
ExpandedSubBlockStart.gif        
{
InBlock.gif            Console.WriteLine(
"我在跳");
ExpandedSubBlockEnd.gif        }

ExpandedBlockEnd.gif    }

None.gif

 

它可以:

1. 以上三個類可以不放在相同的CS檔案裡

2. 後兩個分部類如果不寫,編譯能順利通過,在IL裡產生有方法體的RunJump,但是空實現。

它不可以:

1.分部方法不能是公開型別,必須是私有。

2.實現類不能和定義類分別存在不同的程式集裡。

它有價值的地方:

1.更細化分工過程。以前系統分析到物件級,現在可以細到方法級別。從例子裡看,物件框架維護人定義了Active方法,而RunJump可能被分派到其他人實現。

這樣的分工模式和更大規模的整合開發趨勢是緊密關聯的。簡單的看,這只是一個新的語言特性;仔細思考,這其實是軟體朝工業化方向發展的一個訊號。以後的軟體開發過程勢必是基於更多特性(或者說是開發工藝),在生產線上完成的。一個人就是一個螺絲釘,讓你實現RunRun,讓你JumpJump,如果你想發揮自己的聰明才智,好,就在這個範圍內盡情的發揮吧!

 2.程式碼可以寫的更優雅,如果本例中的RunJump的內部實現異常複雜(AI機器人行為嘛),一個CS

檔案搞個幾千上萬行,別人讀的時候時會吐血的。如果再碰到一個寫程式碼不地道的,把方法堆砌起來了事,那是連肝都要吐出來的。有了分部方法,就可以把問題壓到區域性,不想看的地方我就可以看不見。

 3. 程式碼優雅只是一個表象,如果是犧牲了效能換取的,我寧願不要這個特性。事實上恰恰相反,分部方法的效率是非常OK的。具體就去寫個例子,觀察IL吧。哈哈!