日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

让你觉得破坏了封装性的扩展方法

發(fā)布時(shí)間:2024/6/14 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 让你觉得破坏了封装性的扩展方法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

擴(kuò)展方法
源于對(duì)擴(kuò)展方法的了解是來自List<T>的Where、Order、GroupBy等方法的使用,智能感知提示這些方法都是擴(kuò)展方法,于是MSDN上查閱后總結(jié)如下自定義擴(kuò)展方法(將字符串轉(zhuǎn)換為Int,代碼拷貝)

namespace?MyCommon

{

????public?static?class?EString

????{

????????public?static?int?ToInt(this?string?t)

????????{

????????????int?id;

????????????int.TryParse(t, out?id);//這里當(dāng)轉(zhuǎn)換失敗時(shí)返回的id為0

????????????return?id;

????????}

????}

}

微軟規(guī)定,擴(kuò)展方法:1、必須是靜態(tài)類和靜態(tài)方法(而且必須是public
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2
、參數(shù)必須以this作為前綴

其實(shí)咋一看,擴(kuò)展方法明顯違法了封裝性的原則,把方法設(shè)為public,讓外界直接調(diào)用,這是很違法封裝原則的,但是這里沒有辦法,如果改為private,外界實(shí)例無法訪問,但是微軟告訴我們,雖然是使用實(shí)例方法的語法來調(diào)用擴(kuò)展方法,但是編譯器生成的IL中間語言的時(shí)候會(huì)把代碼轉(zhuǎn)換成對(duì)靜態(tài)方法的調(diào)用,理論上說并未真正違法封裝性的原則,但是這種解釋有點(diǎn)牽強(qiáng)。

我突然發(fā)現(xiàn),該靜態(tài)類的名稱?EString似乎毫無用處,似乎可以隨意改動(dòng),的確是這樣,這里要的只是命名空間和方法名,而方法的第一個(gè)參數(shù)決定了該擴(kuò)展方法是用于對(duì)何種類型的擴(kuò)展,例如上面的例子this?string?t,第一個(gè)參數(shù)的類型是string,則是對(duì)string做的擴(kuò)展方法

另外擴(kuò)展方法的優(yōu)先級(jí)總是比實(shí)例本身的方法的優(yōu)先級(jí)低,即如果A類本身有fun1()方法,則另外擴(kuò)展一個(gè)同名的fun1方法,則擴(kuò)展的fun1,永遠(yuǎn)不會(huì)執(zhí)行,因?yàn)樵诰幾g的時(shí)候編譯器永遠(yuǎn)不會(huì)綁定到該擴(kuò)展方法


轉(zhuǎn)載于:https://www.cnblogs.com/yinhaichao/p/3253299.html

總結(jié)

以上是生活随笔為你收集整理的让你觉得破坏了封装性的扩展方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。