精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

有關virtual,override與擴展點的討論

開發 后端
所有的成員都應該是virtual的嗎?這是一個由來已久的討論。本文對有關virtual,override與擴展點的討論闡述了一番自己的見解。

Virtual即虛擬。在C#中,Virtual指的是虛方法或虛函數。有關這個Virtual有一個經常被討論的問題:所有的成員都應該是virtual的嗎?

這是一個由來已久的討論,由于Java默認所有的方法都是可以被override的(除非手動寫成final),因此從C#語言設計起初就有此番爭論,甚至讓Anders都出來解釋了一下。最近又有人在討論這方面話題了,雖然我的看法并沒有超出這些人所涉及的范疇,但是我還是打算談一下我的理解。退幾步說,就當補充一些“實例”吧。

Virtual,Override與擴展點的關系簡述

此次的話題是由Ward Bell引起的,他在review了Roy Osherove的新書《The Art of Unit Testing》之后認為,他不同意Roy給出的建議“將所有的成員默認為virtual”,為此他還獨立開篇解釋了他的觀點。這篇文章引起的討論較為熱烈,我也打算在詳細總結一番。與Ward觀點對應的是,著名的Jeremy Miller希望.NET中所有的成員默認就是virtual的,而“月寫博客80篇”的Oren Eini甚至認為所有的成員都應該標為virtual。

繼承一個類并override掉其中的成員,是面向對象編程中最常用的方式之一。這是一種擴展方式,而能夠被override的方法便是“擴展點”。所以我認為,是否把成員標記為virtual,其實涉及到的概念便是“是否把它開放為一個擴展點”。Oren認為“所有成員都應該virtual”則意味著“任何成員都是可擴展點”,而對于“默認為virtual”的觀點來說,則意味著“傾向于打開更多的擴展點”——其實除了Oren有些極端外,“傾向性”代表的更多是一種“口味”,因為無論是Java還是.NET,都可以標記一個成員能否被override。

從Virtual,Override與擴展點延伸談去

我不想討論“口味”問題,不過我的觀點與Ward類似,即使在C#出現之前,我也一直不太喜歡Java的這個特性(不過當時相關體會比較少,所以感覺并不強烈)。Oren認為打開更多擴展點,有助于從各方面進行擴展,他說他的這個做法也過于也得到了較多的“實惠”。不過我認為,這是由于Oren的能力過于厲害,并且知道該做什么不該做什么,并且可以對自己作的事情所負責決定的。

對于一個可“全面擴展”的類型來說,意味著開發人員有更多的自由,進而意味著選擇(即使是做同一件事情)。但是選擇多,則同樣意味著我們需要了解的多,一個不慎可能就會發現沒有得到預期的效果。例如,在繼承了ASP.NET的Control類之后,您要改變它輸出的內容,您會選擇覆蓋哪一個方法?

  1. protected internal virtual void Render(HtmlTextWriter writer)  
  2. {  
  3.     this.RenderChildren(writer);  
  4. }  
  5.  
  6. protected internal virtual void RenderChildren(HtmlTextWriter writer)  
  7. {  
  8.     ...  
  9. }  

您可能會說,覆蓋哪個都可以。但是,它們其實都有不同的語義,只是因為在Control基類中Render自身就是Render所有的子控件。但是到了子類中,Render自身可能就會涉及到邊框等其他內容了。如果您隨便選一個,您的類型看上去沒有問題,但是如果別人希望繼承你寫的類,補充一些實現,那么你的“選擇”就會影響到他的結果了。當然我并不是說Control類設計的不對,它的設計我覺得是正確的,我只是想說明,如果每個成員都可擴展,那么用戶在真正需要擴展的時候就會比較麻煩了。

架構是一種擴展,也是一種約束,限制了別人可以怎么做,也必須怎么做。我們雖然無法避免別人的惡意行為,但是良好的擴展點也可以給別人更好的指導。

再舉一個例子。在.NET中,最容易擴展的抽象元素是什么呢?應該是“接口”。接口中的所有成員都是由實現方提供的,除了成員的簽名之外,接口并沒有作任何限制。正如我在之前寫過的一篇文章里提到,別人完全可以實現出外強中干的對象:

  1. public interface IList<T>  
  2. {  
  3.     void Add(T item);  
  4.     int Count { get; }  
  5.    
  6.     ...  

根據接口中隱含的協議,Add方法調用之后,Count必須加一。但是這個協議并無法加諸于實現之上。如果要提供這方面的約束,我們只能公開一部分的擴展點,而不是把所有的職責交給實現方:

  1. public abstract class ListBase<T>  
  2. {   
  3.     public int Count { getprivate set; }  
  4.    
  5.     public void Add(T item)  
  6.     {  
  7.         this.Count++;  
  8.         this.AddCore(item);  
  9.     }  
  10.    
  11.     protected abstract void AddCore(T item);  
  12.    
  13.     ...  

Ward也舉了一個“電梯”的例子。電梯有一個Up方法,調用它則意味著電梯上升。但是如果把Up這個關鍵行為擴展出去,那么別人在“修改電路”(即override這個Up方法)的時候,可能就會把電梯搞亂套了,例如原本應該先關門再啟動,現在可能先啟動再關門,甚至一旦Up電梯就下降了。Oren認為擴展方應該為自己的擴展負責,但是我還是認為,擴展點應該和成員訪問級別等東西一樣,只給出必要的,控制住關鍵的。

最后的例子也是常見的:

  1. public class SomeClass  
  2. {  
  3.     public void SomeMethed()  
  4.     {  
  5.         this.SomeMethed(String.Empty);  
  6.     }  
  7.  
  8.     public void SomeMethed(string s)  
  9.     {  
  10.         this.SomeMethod(s, 0);  
  11.     }  
  12.  
  13.     public virtual void SomeMethod(string s, int i)  
  14.     {  
  15.         // ...  
  16.     }  
  17. }  

為了方便起見,我們常常會對類型中的方法給出重載,其中大部分的重載最終都委托給一個唯一的核心方法。當用戶繼承SomeClass類之后,他便擁有了一個唯一的擴展點,這樣便可以確保這個類的行為按照一定的“準則”在正常開展。否則的話,用戶就需要在三個方法中進行選擇性的override,并且要平衡三者的行為。因為在擴展SomeClass的時候,并不知道SomeClass的使用者會調用SomeMethod的哪個重載。

這對于單元測試一樣。如果三個方法都可以Mock,那么在測試時我們可能就會去“猜測”用戶究竟調用了哪個SomeMethod重載,而這是不確定的,也是容易變化的。如果我們只有一個重載可以Mock,那么則意味著“別挑了,就是這個”。所以,我有時候也不太喜歡Type Mock如此強大有力的Mock框架,因為它可能會破壞了被測試方的設計,把一切都變成了擴展點——雖然這對于測試來說的確很方便,幾乎不輸給動態語言了。

“可測試性”也是設計出來,不是語言或平臺自動賦予的。這就是“design for testability”的體現之一吧。

以上就是有關virtual,override與擴展點的一些討論。本文來自老趙點滴:《所有的成員都應該是virtual的嗎?》

【編輯推薦】

  1. C#反射命名空間淺析
  2. C#靜態方法概念解析實例
  3. C#靜態方法與非靜態方法的比較
  4. C#靜態方法應用實例詳解
  5. C#反射概念以及實例詳解
責任編輯:yangsai 來源: 老趙點滴
相關推薦

2010-08-04 14:33:42

自動掛載nfs

2015-05-28 11:17:37

溫哥華峰會OpenStackDocker

2009-08-12 17:33:25

繼承與擴展方法

2010-03-02 09:14:00

Linux創建用戶命令

2009-09-14 19:44:27

LINQ To SQL

2009-08-04 16:06:19

ASP.NET代碼分離

2009-07-06 13:23:12

C#面向集合

2009-08-28 15:28:22

C# overridenew隱藏

2009-08-13 18:00:48

Eclipse重構功能擴展點

2012-02-13 09:30:51

響應式Web設計

2024-05-14 10:03:51

2023-11-28 08:01:25

2023-12-01 07:28:40

SpringbootBean

2023-09-28 08:49:41

springBean

2010-05-05 14:01:51

Unix系統

2009-12-25 17:11:40

ADO方法

2019-11-22 16:05:44

阿里巴巴技術開源

2011-06-16 14:46:21

2021-03-02 10:32:17

合規性控制風險管理領導者

2021-06-06 17:32:09

人臉識別AI人工智能
點贊
收藏

51CTO技術棧公眾號

久久国产精品色av免费看| 二区三区四区高清视频在线观看| 国产精品久久777777毛茸茸 | 欧美美女激情18p| 五月天男人天堂| 国产精品永久久久久久久久久| 天天做天天爱天天综合网2021| 7777精品伊人久久久大香线蕉的| 97超碰免费观看| 韩国av电影在线观看| 男人的天堂亚洲在线| 中日韩午夜理伦电影免费| 91视频福利网| 亚洲精华液一区二区三区| 亚洲国产精品黑人久久久| 亚洲伊人成综合成人网| 日韩三级一区二区三区| 欧美一区2区| 在线不卡中文字幕播放| 日本高清xxxx| 欧美日韩国产综合视频| 极品少妇一区二区| 欧美性做爰毛片| 成人在线观看高清| 亚洲美女久久| 欧美一区二区在线免费播放| 亚洲中文字幕无码专区| 麻豆传媒在线观看| 久久欧美中文字幕| 91丝袜脚交足在线播放| 国产美女www| 亚洲高清电影| 日日噜噜噜夜夜爽亚洲精品 | 黑人中文字幕一区二区三区| 中文字幕欧美色图| 国产精品毛片一区二区三区| 久久精品国产99国产精品澳门| 中国极品少妇videossexhd| 日韩黄色三级| 色综合久久中文综合久久牛| 黄网站色视频免费观看| 青青影院在线观看| 久久久久久电影| 国产日韩欧美一区二区| 99热这里只有精品在线| 青青草视频一区| 日本aⅴ大伊香蕉精品视频| 久久老司机精品视频| 天天影视天天精品| 中文字幕久精品免费视频| www.超碰97| 国产精品chinese在线观看| 欧美日韩精品免费观看视频| 成年人视频在线免费| 91福利在线免费| 一区二区在线观看不卡| 影音先锋欧美资源| 免费一级在线观看| 丁香六月久久综合狠狠色| 成人国产精品一区二区| 中文字幕乱码人妻二区三区| 久久婷婷亚洲| 欧美重口另类videos人妖| 国产在线视频第一页| 欧美精选一区| 色综合久久88| 加勒比婷婷色综合久久| 亚洲一级淫片| 欧美成人午夜剧场免费观看| 超碰手机在线观看| 欧美大片一区| 久久久久久香蕉网| 国产成人无码精品| 亚洲一区二区三区高清| 欧美在线xxx| 国产性生活视频| 日韩精品三区四区| 国产日韩欧美在线观看| 国产精品人人爽| 国产一区二区在线看| 91文字幕巨乱亚洲香蕉| 亚洲h视频在线观看| 高清在线观看日韩| 精品一区久久| 都市激情在线视频| 国产精品久久久久国产精品日日| 亚洲精品乱码久久久久久蜜桃91| 免费黄色在线观看| 亚洲综合区在线| av在线播放亚洲| 欧美xxx视频| 欧美在线免费视屏| 亚洲精品免费一区亚洲精品免费精品一区 | 婷婷综合久久| 欧美日韩国产va另类| 日韩欧美高清在线观看| 久久久久国产精品一区二区| 国产精品色婷婷视频| 999av视频| 北条麻妃一区二区三区| 欧美日韩一区二区三区在线视频| 69久久夜色| 一区二区激情视频| 任你操这里只有精品| 91成人app| 亚洲护士老师的毛茸茸最新章节| 国产sm调教视频| 综合天天久久| 国产成人av网址| www.四虎在线观看| 国产色产综合产在线视频| 99精品一级欧美片免费播放| 国产高清自产拍av在线| 欧美日韩一级片在线观看| 少妇伦子伦精品无吗| 国内精品久久久久久99蜜桃| 久久777国产线看观看精品| 国产www在线| 国内精品伊人久久久久av影院| 国产午夜精品一区| 午夜小视频在线| 亚洲第一久久影院| 亚洲激情在线看| 亚洲欧美tv| 欧美国产日产韩国视频| 中文字幕有码视频| 91色在线porny| 在线观看免费黄色片| 天天免费亚洲黑人免费| 日韩欧美一级二级三级久久久| 自拍偷拍亚洲天堂| 国产综合网站| 国产美女久久精品| 男同在线观看| 亚洲福利视频一区二区| 激情久久综合网| 欧美军人男男激情gay| 久久久中文字幕| 国产极品久久久| 国产精品成人免费| 亚洲老女人av| 国产成人精品三级高清久久91| 久久理论片午夜琪琪电影网| 国产理论片在线观看| 日本一区二区三区四区在线视频| 久久精品国产精品亚洲色婷婷| 北条麻妃在线一区二区免费播放| 久久天天躁狠狠躁老女人| 免费在线观看av的网站| 久久久九九九九| 日韩欧美一区二区不卡| 成年人三级黄色片| 成人综合影院| 高跟丝袜欧美一区| 99久久人妻精品免费二区| 欧美日韩1区| 亚洲最大成人在线| 综合久久2o19| 日韩午夜电影在线观看| 在线免费日韩av| 国产精品亚洲一区二区三区妖精| 国产精品99久久久久久大便| 日韩欧国产精品一区综合无码| 最新69国产成人精品视频免费| 黄色av网站免费| 中文无字幕一区二区三区| 在线免费观看av的网站| 久久裸体网站| 91免费精品视频| 1stkiss在线漫画| 欧美刺激脚交jootjob| 国产在线视频第一页| 99久久久无码国产精品| 成年人黄色片视频| 欧美午夜精彩| 成人性生交大片免费观看嘿嘿视频 | 青青草成人在线| 黄色影院在线播放| 欧美日韩一区视频| 蜜臀久久精品久久久用户群体| 国产精品资源网站| 国产玉足脚交久久欧美| 午夜欧洲一区| 国产精品美女主播在线观看纯欲| 思思99re6国产在线播放| 欧美一区二区三区四区在线观看| 国产一级片免费| 91麻豆精品在线观看| 最近中文字幕一区二区| 国产精品久久久乱弄| 古典武侠综合av第一页| 忘忧草在线影院两性视频| 在线看欧美日韩| 国产成人三级一区二区在线观看一| 夜夜夜精品看看| 精品夜夜澡人妻无码av| 青青草97国产精品免费观看无弹窗版 | 精品国产午夜福利| 国产精品久久久久影视| 2018国产精品| 日本不卡一区二区| 国产又粗又长又爽视频| 日韩欧美在线精品| 国产日韩亚洲欧美| 超碰在线97国产| 中文字幕国产亚洲2019| 日韩在线视频观看免费| 在线精品视频免费观看| 久久国产高清视频| 久久综合国产精品| 中文字幕55页| 日韩高清不卡一区二区| 免费看黄色a级片| 台湾亚洲精品一区二区tv| 欧洲亚洲免费在线| 成人影欧美片| 亚洲欧美制服中文字幕| 国产黄色一区二区| 欧美性猛片xxxx免费看久爱| 久久无码精品丰满人妻| 亚洲国产精品ⅴa在线观看| 岛国精品一区二区三区| 奇米影视7777精品一区二区| 中文字幕无码精品亚洲资源网久久| 欧美三级美国一级| 国产日韩欧美一区二区| 成人噜噜噜噜| 国产精品青青在线观看爽香蕉| 欧美巨大xxxx做受沙滩| 日韩亚洲精品视频| 毛片网站在线| 亚洲精品久久久久久久久久久 | 日韩精品色哟哟| 国产96在线 | 亚洲| 午夜精品一区二区三区国产 | 久久久久久久久久久久久久久99 | av大片免费在线观看| 亚洲男人天堂一区| 性爱在线免费视频| 国产亚洲一区字幕| 一级国产黄色片| 成人免费视频caoporn| 伦伦影院午夜理论片| 九九久久精品视频| 中文字幕国内自拍| 日韩国产欧美视频| 已婚少妇美妙人妻系列| 午夜在线精品| 亚洲熟妇av一区二区三区漫画| 影院欧美亚洲| www.国产在线播放| 欧美日本二区| 欧美精品一区二区性色a+v| 999国产精品永久免费视频app| 日韩高清av| 精品久久精品| 先锋影音一区二区三区| 色综合天天爱| 在线观看一区二区三区三州 | 国产一区二区三区美女| 中日韩av在线播放| 久久国产精品一区二区| 手机免费av片| 国精产品一区一区三区mba桃花| 国产精品视频中文字幕| 久久成人精品无人区| 天天久久综合网| 国产美女精品一区二区三区| 欧美性猛交xx| 成人激情文学综合网| 欧美xxxxx精品| 91蜜桃免费观看视频| 亚洲精品成人无码| 国产精品美女久久久久高潮| 天天爽天天爽天天爽| 一区二区在线观看视频| 日韩av在线播放观看| 色天使色偷偷av一区二区| 中文字幕码精品视频网站| 欧美一级片免费看| 欧美视频在线观看一区二区三区| 亚洲国产日韩欧美综合久久| 男人的天堂在线视频| 最新的欧美黄色| www久久日com| 午夜精品久久久久久久男人的天堂| 97蜜桃久久| 国产精品都在这里| 精品国产三级| 久久久国产精品一区二区三区| 欧美日韩一区二区三区视频播放| 中国一级黄色录像 | 99精品视频在线看| 秋霞电影一区二区| 中文字幕第六页| 久久综合色鬼综合色| 免费一级suv好看的国产网站| 一区二区三区日韩| 中文字幕在线天堂| 日韩天堂在线观看| 精品乱码一区二区三四区视频| 久久精品一区中文字幕| 日产福利视频在线观看| 91丨九色丨国产在线| 日韩高清影视在线观看| 中文字幕一区二区中文字幕| 亚洲精品四区| 日韩va在线观看| 91亚洲国产成人精品一区二区三| 手机免费观看av| 亚洲成av人片一区二区| 91久久国语露脸精品国产高跟| 欧美精品一区二区三区在线 | 日韩欧美不卡视频| 欧美久久久久久蜜桃| 婷婷久久久久久| 日韩亚洲国产中文字幕| 中文字幕色婷婷在线视频| 亚洲影院在线看| 精品国产一区二区三区四区| 免费看欧美黑人毛片| 久久精品国产成人一区二区三区| 老熟妇精品一区二区三区| 亚洲欧洲精品一区二区三区不卡| 免费看日韩毛片| 日韩一级黄色大片| 五月天婷婷在线视频| 欧美一级在线播放| 试看120秒一区二区三区| 亚洲精品在线免费看| 欧美专区一区二区三区| 久久性爱视频网站| 怡红院av一区二区三区| 97人妻一区二区精品免费视频 | www.男人天堂| 亚洲精品免费在线播放| 97精品人妻一区二区三区| 亚洲午夜av电影| 亚洲永久av| 国偷自产av一区二区三区小尤奈| 欧美在线看片| 亚洲精品免费一区亚洲精品免费精品一区| 久久精品人人做| 天天干,天天干| 日韩av一区二区在线| ****av在线网毛片| 国产v亚洲v天堂无码| 欧美日韩精品| 四虎国产精品免费| 一区二区三区在线观看动漫| 国产伦精品一区二区三区免.费| 中文字幕在线看视频国产欧美| 美女100%一区| 欧美激情第一页在线观看| 毛片一区二区| 88久久精品无码一区二区毛片| 欧美性猛交xxxx免费看| 日本一区高清| 国产91在线播放九色快色| 亚洲免费专区| 免费午夜视频在线观看| 国产视频一区在线观看| 亚洲性猛交富婆| 中国日韩欧美久久久久久久久| 四虎4545www精品视频| 亚洲va久久久噜噜噜久久狠狠 | 欧美一级高清免费| 日韩美女精品| 北条麻妃在线视频| 中文av一区特黄| 在线视频 91| 久久电影一区二区| 99ri日韩精品视频| 欧美日韩在线一| 久久女同精品一区二区| 中文字幕视频二区| 久久人人爽人人爽爽久久| 视频在线亚洲| 欧美亚洲精品一区二区| 久久蜜桃av一区精品变态类天堂 | 丰满熟妇乱又伦| 久久久噜噜噜久久久| 日韩高清成人在线| 午夜免费看毛片| 一区二区免费看| 手机福利在线| 国产美女精品视频| 亚洲电影成人| 在线观看日本黄色| 欧美一级二级三级乱码| 91吃瓜在线观看| 亚洲国产欧美日韩| 国产福利一区在线| 日韩人妻精品中文字幕| 日韩在线观看av| 久久a爱视频| 校园春色 亚洲色图| 亚洲国产欧美日韩另类综合| 国产专区在线播放| 99精品在线直播|