自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C#分部方法的應(yīng)用場(chǎng)景

開發(fā) 后端
這里介紹C#分部方法的應(yīng)用場(chǎng)景,C#分部方法和分部類型的初衷是類似的,一方面可以使得不同的開發(fā)者能夠同時(shí)編寫一個(gè)類型的不同部分,另一方面可以分離自動(dòng)生成的代碼和用戶手寫的代碼。

C#分部方法的應(yīng)用場(chǎng)景

C#分部方法和分部類型的初衷是類似的,一方面可以使得不同的開發(fā)者能夠同時(shí)編寫一個(gè)類型的不同部分,另一方面可以分離自動(dòng)生成的代碼和用戶手寫的代碼。和分部類型一樣,分部方法也會(huì)在編譯初期被合并成一個(gè)方法定義。猜測(cè):從微軟的角度來(lái)看,第二個(gè)“初衷”可能才是真正的初衷。

由此,分部方法有如下幾個(gè)應(yīng)用場(chǎng)景:
場(chǎng)景1 出自In Case You Haven't Heard這篇文章
場(chǎng)景2 出自Visual Studio 2008的Linq to SQL技術(shù)
場(chǎng)景3 則是Anders Liu自已臆想出來(lái)的。

C#分部方法場(chǎng)景1 輕量級(jí)事件處理

有的時(shí)候,自動(dòng)生成的代碼需要事件這類語(yǔ)言構(gòu)造來(lái)通知用戶對(duì)某些操作進(jìn)行處理,但實(shí)際上用于編寫的代碼就位于自動(dòng)生成的類型之中。此時(shí),或者需要觸發(fā)一個(gè)事件,或者就需要生成一個(gè)virtual方法來(lái)讓用戶繼承。但無(wú)論是事件還是繼承,開銷都是比較大的,所以可以通過(guò)分部方法來(lái)實(shí)現(xiàn)輕量級(jí)的處理方式。如下面的類:

  1. partialclassCustomer  
  2. {  
  3. stringname;  
  4.  
  5. publicstringName  
  6. {  
  7. get  
  8. {  
  9. returnname;  
  10. }  
  11. set  
  12. {  
  13. OnBeforeUpdateName();  
  14. OnUpdateName();  
  15. name=value;  
  16. OnAfterUpdateName();  
  17. }  
  18. }  
  19.  
  20. partialvoidOnBeforeUpdateName();  
  21. partialvoidOnAfterUpdateName();  
  22. partialvoidOnUpdateName();  

這里定義了三個(gè)分部方法,其意義不言而喻。假設(shè)這是系統(tǒng)自動(dòng)生成的代碼,則我們只需在另外一個(gè)源代碼文件中的partial class Customer中實(shí)現(xiàn)這幾個(gè)分部方法即可。

C#分部方法場(chǎng)景2 自定義DataContext中的Insert、Update、Delete方法

當(dāng)使用Linq to SQL向項(xiàng)目中加入了實(shí)體類之后,還會(huì)創(chuàng)建一個(gè)XxxDataContext類,這個(gè)類繼承自DataContext類,并且是partial的。這個(gè)類封裝了具體的數(shù)據(jù)庫(kù)操作功能(實(shí)體類僅封裝數(shù)據(jù)庫(kù)中的數(shù)據(jù)),如對(duì)象的插入、更新和刪除等。

下面我們來(lái)看一下這個(gè)自動(dòng)生成的類定義:

  1. publicpartialclassAdventureWorksDataContext:System.Data.Linq.DataContext  
  2. {  
  3.  
  4. privatestaticSystem.Data.Linq.Mapping.
    MappingSourcemappingSource
    =newAttributeMappingSource();  
  5.  
  6. #regionExtensibilityMethodDefinitions  
  7. partialvoidOnCreated();  
  8. partialvoidInsertAWBuildVersion(AWBuildVersioninstance);  
  9. partialvoidUpdateAWBuildVersion(AWBuildVersioninstance);  
  10. partialvoidDeleteAWBuildVersion(AWBuildVersioninstance); 

這里我們可以看到一系列的partial方法。其中第一個(gè)OnCreated實(shí)際上屬于場(chǎng)景1中描述的情況,是一個(gè)輕量級(jí)的事件,表示 DataContext環(huán)境對(duì)象創(chuàng)建完畢。而其他partial方法則用于自定義DataContext的IUD操作。對(duì)于每一個(gè)表(實(shí)體類),這里都會(huì)出現(xiàn)一組InsertXxx、UpdateXxx和DeleteXxx方法。如果我們希望自定義刪除行為(如希望將一個(gè)IsDelete字段設(shè)置為 true來(lái)表示已刪除),則可以在另一個(gè)文件中擴(kuò)展這個(gè)partial類,并為對(duì)應(yīng)的Delete方法提供實(shí)現(xiàn)聲明。

C#分部方法場(chǎng)景3 新的調(diào)試信息輸出方法

這是Anders Liu臆想的場(chǎng)景,在分部方法的協(xié)助下,我們可以寫出這樣的代碼:

  1. partialclassCA  
  2. {  
  3. partialvoidDebugPrint(stringmsg);  
  4. ...  
  5. voidF()  
  6. {  
  7. ....  
  8. DebugPrint("aaa");  
  9. }  
  10. }  
  11.  
  12. partialclassCA  
  13. {  
  14. #ifDEBUG  
  15. partialvoidDebugPrint(stringmsg);  
  16. {  
  17. Debug.WriteLine(msg);  
  18. }  
  19. #endif  

這樣做的好處在于,我們還是反過(guò)來(lái)說(shuō)罷,如果不這樣做,必須在每次調(diào)用調(diào)試代碼時(shí)都加入#if判斷。而這樣可以將調(diào)試代碼都寫成方法,在一處用#if進(jìn)行判斷。

缺點(diǎn)在于,由于分部方法必須是私有的,所以必須針對(duì)每個(gè)類寫一套調(diào)試代碼。以上介紹C#分部方法的應(yīng)用場(chǎng)景。

【編輯推薦】

  1. 淺析C# ArrayList
  2. C#對(duì)象初始化學(xué)習(xí)總結(jié)
  3. 使用C#正則表達(dá)式匹配相關(guān)字符串
  4. C#改寫方法學(xué)習(xí)筆記
  5. 概述C#加框和消框
責(zé)任編輯:佚名 來(lái)源: 博客園
相關(guān)推薦

2009-08-10 17:00:14

C#分部方法

2009-08-14 10:59:35

C#分部方法

2010-12-21 14:21:36

線程C#

2024-04-16 12:13:07

usingC#開發(fā)

2011-04-27 09:22:28

C#延遲加載

2012-10-23 09:32:07

2011-05-17 15:24:18

Shibboleth認(rèn)證

2022-09-05 14:46:01

元宇宙區(qū)塊鏈人工智能

2014-12-10 10:36:23

IaaS云應(yīng)用場(chǎng)景

2021-06-04 15:45:43

XR虛擬現(xiàn)實(shí)虛擬經(jīng)濟(jì)

2024-03-06 09:24:50

AsyncAwaitC#

2016-10-21 15:07:11

2024-03-12 10:36:06

函數(shù)指針代碼

2010-08-31 19:45:26

DHCP server

2009-08-28 12:47:30

C#靜態(tài)方法應(yīng)用

2021-12-24 10:24:10

零信任

2019-04-10 15:43:12

SDN場(chǎng)景網(wǎng)絡(luò)架構(gòu)

2020-12-28 10:56:20

無(wú)人機(jī)人工智能機(jī)器學(xué)習(xí)

2015-04-07 10:46:48

Redis

2024-12-19 08:50:38

Redis存儲(chǔ)系統(tǒng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)