亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

正確使用C#中的#region指令來進行代碼的組織

2023-05-18 12:33:06
字體:
來源:轉載
供稿:網友

本文旨在講解如何正確地使用#region指令,以更好地組織代碼。使用#region就是將一些有關聯的代碼組織在一起,然后折疊起來。這樣你就在一個函數中看不到很長很長的代碼段。例如:


 
  1. public void DoSomething()  
  2. {    
  3. bool shouldIDoSomething;     
  4. #region Decide if I should do something   
  5. if(needToDoSomething && haventDoneSomethingThisDay)  
  6. shouldIDoSomething = true;   
  7.  else    
  8. {  
  9. // do some other logic to decide and 
  10. set shouldIDoSomething to some value  
  11.   }    
  12. #endregion     
  13. if(shouldIDoSomething)    
  14. {done++;  }} 

當然這段代碼很簡單。在實際項目中,你可能看到上百行甚至更多的代碼在一個#region中。如果把它折疊起來。看起來就會很整潔。是吧?


 
  1. public void DoSomething()  
  2. {    
  3. bool shouldIDoSomething;     
  4. [Decide if I should do something]     
  5. if(shouldIDoSomething)    
  6. {done++;    
  7. }} 

我們只是把一些代碼和一些變量組合起來放在#region中。如果你在仔細想想,其實我們相當與創建了一個新的函數,只是將這些方法內置到當前方法中。一個函數只做單一的一件事情,這是Clean Code這本書的一個原則。為什么我們不把它提取為一個方法呢,這樣一來,一個函數就只做一件事情了。


 
  1. public void DoSomething(){    
  2. if(ShouldIDoSomething())   
  3.  {done++;  }}   
  4. private bool ShouldIDoSomething(){    
  5. if(needToDoSomething && haventDoneSomethingThisDay)  
  6. shouldIDoSomething = true;    
  7. else   
  8.  {  
  9. // do some other logic to decide   
  10. and set shouldIDoSomething to some value  }} 

這樣看起來就清楚很多,因為我們降低了之前的DoSomething函數的復雜度。兩個函數可以分開測試,確保沒有邏輯錯誤。
小段總結1:  #region 不適合在大方法中使用,當你在一個方法中使用#region 的時候,停下來想想你剛剛寫了什么代碼?大多數時候,你可以將這些代碼段獨立成一個函數。

看看下面這段非常漂亮的代碼:


 
  1. #region Get Customer   
  2. public void GetCustomer(){    
  3. // code to get the customer}   
  4. #endregion   
  5. #region Save Customer   
  6. public void SaveCustomer(){    
  7. // code to save the customer}   
  8. #endregion 

將它折疊之后,變成下面這樣:


 
  1. [Get Customer] [Save Customer] 

這樣做很容易閱讀嗎?這樣做的目的是什么,我不明白?代碼折疊就會變得更好?我覺得這樣做只會讓代碼更難以閱讀,因為你每次要看region中的代碼,你都要展開一次。

小段總結2:不要因為你能,你就使用#region 。

再看下面這個例子


 
  1. public class PriceCalculator{    
  2. public decimal CalculatePrice()    
  3. {decimal price = 100m;decimal discount = CalculateDiscount();  
  4. return price * (1m - discount));   
  5.  }     
  6. #region Discount Calculation     
  7. private void CalculateDiscount()    
  8. {decimal discount = 0m;   
  9. if(CanApplyDiscount())    
  10. discount = 0.05m;   
  11. return discount;   
  12.  }     
  13. private void CanApplyDiscount()  {  
  14. // some logic, other method calls  }     
  15. // some other discount calculation methods  ...     
  16. #endregion} 

如果你將這個例子和本文中的第一個例子做下比較,你可能會看到它們的共同點。他們是相同的,不過一個是在類中,一個是在函數中,層級不同而已。這里在提一個原則:單一職責原則,一個類應該只有一個職責??瓷厦娴念?,你可以很容易看出它有兩個職責:價ge計算和折扣計算。折扣計算的方法被放到一個#region中。同樣,可以將它們提取出來做為一個新類。

小段總結3:可以將一組相關的函數提取到一個職責單一的新類中。

那我們到底怎么使用 #region 呢。將東西用它來分組,它是非常有用的。在我寫的類中或多或少有幾個regions,用來對類中不同的結構進行分組。比如: fields, properties, methods, events, types等。如果你打開我寫的類文件,你會看到結構如下:


 
  1. public class SomeClass{  
  2. [Events]  
  3. [Fields]  
  4. [Properties]   
  5. [Methods]} 

總的來說:我將region看成能控制閱讀源代碼的復雜度的一種方式。因為你可以將一些相關的代碼放在一個區域(region)里面。但是,這不是隨便就創建的新的方法或者新類的借口。其實Region并不能消除復雜度,它只是在你閱讀代碼的時候,隱藏了部分代碼。你必須通過寫出小巧,清晰,重點突出的方法和類,才能控制代碼的復雜度。當你做到這些的時候,你甚至會發現region是不必要的。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲裸体xxxx| 亚洲欧洲午夜一线一品| 亚洲女成人图区| 久久亚洲精品网站| 精品国产一区二区三区在线观看| 懂色aⅴ精品一区二区三区蜜月| 成人激情电影一区二区| 一区二区三区视频免费| 91大神福利视频在线| 国产福利视频一区| 亚洲欧美一区二区精品久久久| 精品一区精品二区| 在线观看视频99| 久久久999精品| 欧美一性一乱一交一视频| 精品久久久久久国产| 色哟哟亚洲精品一区二区| 自拍偷拍免费精品| 亚洲电影在线看| 亚洲最大av网站| 国产日韩在线看| 欧美激情亚洲精品| 91精品国产乱码久久久久久久久| 91精品综合久久久久久五月天| 国产精品色悠悠| 91在线国产电影| 久久人人爽人人爽人人片av高请| 亚洲精品456在线播放狼人| 在线观看欧美日韩国产| 日本精品va在线观看| 国产免费观看久久黄| 懂色av中文一区二区三区天美| 国产性猛交xxxx免费看久久| 久久久这里只有精品视频| 欧美黑人性猛交| 国产精品18久久久久久麻辣| 国产精品欧美日韩久久| 91在线播放国产| 爱福利视频一区| 亚洲精品国偷自产在线99热| 亚洲第一国产精品| 久久久久久久久久国产| 久久久久国产精品免费网站| 91视频九色网站| 亚洲精品少妇网址| 亚洲国产私拍精品国模在线观看| 国产精品国内视频| 亚洲自拍偷拍视频| 欧美国产视频日韩| 69av视频在线播放| 91香蕉亚洲精品| 少妇高潮 亚洲精品| 亚洲精品456在线播放狼人| 国产精品99久久99久久久二8| 精品日韩中文字幕| 国产亚洲综合久久| 欧美最猛性xxxxx免费| 亚洲精品福利在线观看| 亚洲xxxxx性| www.久久久久| 精品久久久久久亚洲精品| 亚洲高清色综合| 亚洲欧美福利视频| 国产亚洲精品久久久久久777| 久久最新资源网| 日韩精品在线播放| 国产91精品视频在线观看| 亚洲老板91色精品久久| 久久的精品视频| 97成人精品区在线播放| 欧美色欧美亚洲高清在线视频| 国产精品吴梦梦| 久久久久久一区二区三区| 日韩中文字幕亚洲| 色婷婷久久一区二区| 国产成人自拍视频在线观看| 夜色77av精品影院| 亚洲国产日韩欧美在线99| 日韩三级成人av网| 久久九九国产精品怡红院| 国产成人精品久久二区二区| 日韩一区av在线| www.日韩系列| 一区二区三区四区精品| 91久久综合亚洲鲁鲁五月天| 国产精品极品美女在线观看免费| 日韩av综合网站| 亚洲白虎美女被爆操| 国产精品亚发布| 亚洲精品国产精品国自产在线| 亚洲第一视频在线观看| 欧美成人一区在线| 91九色视频导航| 久久久中文字幕| 中文字幕日韩av综合精品| 亚洲女同性videos| 欧美精品第一页在线播放| 国产91精品久| 疯狂欧美牲乱大交777| 精品一区二区三区四区在线| 久久久视频免费观看| 欧美放荡办公室videos4k| 欧美国产激情18| 日韩成人在线播放| 国产不卡一区二区在线播放| 欧美中文字幕在线视频| 亚洲xxxx3d| 欧美黄色免费网站| 亚洲国产精品高清久久久| 国产日韩在线视频| 日韩电影免费观看在线| 人体精品一二三区| 日韩精品福利在线| 高清日韩电视剧大全免费播放在线观看| 欧美激情亚洲视频| 欧美激情一二区| 精品中文字幕乱| 亚洲男子天堂网| 国产91精品久久久久久久| 中文字幕久久亚洲| 亚洲自拍偷拍第一页| 日韩中文字幕网| 91国产中文字幕| 欧美大片在线看免费观看| 这里只有精品在线观看| 亚洲成人久久一区| 精品亚洲一区二区三区在线播放| 中文字幕欧美亚洲| 欧美午夜女人视频在线| 亚洲精品日韩激情在线电影| 久久精品中文字幕免费mv| 福利视频一区二区| 永久555www成人免费| 亚洲精品狠狠操| 亚洲片在线观看| 亚洲日韩中文字幕在线播放| 欧美成人黑人xx视频免费观看| 国产精品美女免费| 国产91精品在线播放| 日韩极品精品视频免费观看| 亚洲精品福利视频| 视频一区视频二区国产精品| 色综合久久精品亚洲国产| xxx成人少妇69| 日韩在线播放一区| 成人情趣片在线观看免费| 91免费精品视频| 国产成人久久久| 91欧美精品午夜性色福利在线| 欧美性xxxxx极品娇小| 精品中文字幕在线观看| 亚洲一区二区精品| 久久精品一本久久99精品| 色妞色视频一区二区三区四区| 综合136福利视频在线| 日日狠狠久久偷偷四色综合免费| 97在线观看视频国产| 久久国内精品一国内精品| 国产视频精品xxxx| 国产手机视频精品| 精品亚洲一区二区三区在线观看| 国产精品免费一区二区三区都可以| 亚洲精品国精品久久99热一| 中文字幕亚洲一区二区三区五十路|