背景:
閱讀新聞
.NET或?qū)⒁腩?lèi)型類(lèi)和擴(kuò)展
[日期:2017-04-18]
來(lái)源:infoq.com
作者:Jonathan Allen ,譯者 謝麗
[字體:大 中 小]
類(lèi)型類(lèi)是另外一項(xiàng)正被考慮引入.NET未來(lái)版本的特性越妈。在提案“外觀和擴(kuò)展(Shapes and Extensions)”中,該特性被稱(chēng)為外觀,它們將大幅提升.NET泛型的能力。Mads Torgersen這樣描述類(lèi)型類(lèi):
接口抽象的是作為類(lèi)型實(shí)例的對(duì)象和值的“外觀(shape)”削葱。從根本上講,類(lèi)型類(lèi)背后的思想是抽象類(lèi)型本身的外觀。而且,當(dāng)通過(guò)類(lèi)型聲明引入需要的類(lèi)型實(shí)現(xiàn)一個(gè)接口時(shí),其他人可以在單獨(dú)的代碼中實(shí)現(xiàn)類(lèi)型類(lèi)瓣蛀。
類(lèi)型類(lèi)解決了一個(gè)長(zhǎng)期存在的接口問(wèn)題:它們無(wú)法處理靜態(tài)函數(shù)或操作符重載附迷。這導(dǎo)致了一些問(wèn)題,比如,在數(shù)學(xué)庫(kù)中,對(duì)于不同的數(shù)值數(shù)據(jù)類(lèi)型,需要反復(fù)聲明相同的函數(shù)。
Mads總結(jié)道:
一般來(lái)說(shuō),外觀的聲明和接口聲明非常像,但它:
幾乎可以定義任意類(lèi)型的成員(包括靜態(tài)成員)
可以通過(guò)擴(kuò)展實(shí)現(xiàn)
可以在特定的地方像類(lèi)型一樣使用
最后一個(gè)限制很重要:外觀不是類(lèi)型碱呼。外觀的主要目的是作為泛型的一種約束,限定類(lèi)型參數(shù),保證它們有正確的外觀,并允許泛型聲明體使用那個(gè)外觀境输。
與外觀的思想緊密相關(guān)的是一種經(jīng)過(guò)改進(jìn)的擴(kuò)展語(yǔ)法蔗牡。擴(kuò)展結(jié)構(gòu)幾乎可以為類(lèi)型類(lèi)提供任何東西,而不只是方法擴(kuò)展⌒崞剩考慮下面這個(gè)最簡(jiǎn)單的例子:
Int32類(lèi)型已經(jīng)提供了大部分內(nèi)容,但它缺少zero屬性辩越。擴(kuò)展可以修復(fù)這個(gè)問(wèn)題:
然后,你可以像下面這樣使用它:
實(shí)現(xiàn)
這實(shí)現(xiàn)起來(lái)需要一些接口和結(jié)構(gòu)方面的技巧。
Shapes被翻譯成了接口,每個(gè)成員(甚至是靜態(tài)成員)都轉(zhuǎn)換成了接口中的實(shí)例成員;
擴(kuò)展被翻譯成了結(jié)構(gòu),每個(gè)成員(甚至是靜態(tài)成員)轉(zhuǎn)換成了結(jié)構(gòu)中的實(shí)例成員;
如果擴(kuò)展實(shí)現(xiàn)了一個(gè)或多個(gè)彎管,則底層的結(jié)構(gòu)實(shí)現(xiàn)了那些外觀的底層接口信粮。
通常,上述結(jié)構(gòu)被稱(chēng)為“見(jiàn)證結(jié)構(gòu)(witness struct)”区匣。它的存在可以證明一個(gè)類(lèi)遵循外觀的規(guī)則〗海或者換句話說(shuō),該類(lèi)在類(lèi)型類(lèi)中亏钩。
編譯器會(huì)將上述AddAll方法翻譯成如下代碼:
然后,上述見(jiàn)證結(jié)構(gòu)就可以用于向AddAll方法提供必要的功能。結(jié)構(gòu)可以直接在類(lèi)型上調(diào)用方法或者根據(jù)需要使用擴(kuò)展結(jié)構(gòu)欺旧。
在類(lèi)和接口中實(shí)現(xiàn)外觀
使用和我們擴(kuò)展基類(lèi)及實(shí)現(xiàn)接口一樣的語(yǔ)法,類(lèi)可以顯式實(shí)現(xiàn)一個(gè)外觀姑丑。然后,編譯器會(huì)提供相應(yīng)的見(jiàn)證結(jié)構(gòu)。
也可以將接口標(biāo)記為滿(mǎn)足外觀的要求辞友。下面是一個(gè)例子:
由于IComparable和理論上的類(lèi)型類(lèi)之間存在一對(duì)一關(guān)系,所以我們不需要為擴(kuò)展結(jié)構(gòu)提供擴(kuò)展體栅哀。
泛型類(lèi)型
事實(shí)證明,泛型類(lèi)型有他們自己的問(wèn)題。和泛型方法一樣,向泛型類(lèi)添加外觀或者類(lèi)型類(lèi)作為類(lèi)型約束需要額外提供一個(gè)類(lèi)型參數(shù)称龙。在泛型類(lèi)上,由于類(lèi)型參數(shù)的數(shù)量是其名稱(chēng)的一部分,所以這會(huì)導(dǎo)致它和其它名稱(chēng)相同的泛型類(lèi)型發(fā)生沖突留拾。
擴(kuò)展外觀
擴(kuò)展結(jié)構(gòu)不僅可以用于實(shí)現(xiàn)外觀,還可以擴(kuò)展它們。因此,你可以向現(xiàn)有的外觀中添加新方法鲫尊、靜態(tài)方法及操作符痴柔。正如擴(kuò)展方法一樣,語(yǔ)法是一樣的,就像它們?cè)诘讓宇?lèi)型上直接定義了一樣。
評(píng)論
總的來(lái)說(shuō),人們對(duì)于該特性的反應(yīng)不錯(cuò)疫向。不過(guò),也有一些修改請(qǐng)求咳蔚。例如,外觀目前必須顯式實(shí)現(xiàn)豪嚎。有些開(kāi)發(fā)人員希望,如果特定的類(lèi)或接口不需要額外擴(kuò)展方法時(shí),就由編譯器隱式實(shí)現(xiàn)。Mads列舉了這樣做的一些問(wèn)題:
那可能會(huì)導(dǎo)致,為了見(jiàn)證以相同的方式應(yīng)用到同一類(lèi)型的同一個(gè)外觀而生成許多結(jié)構(gòu)類(lèi)型,有生成的類(lèi)型過(guò)度擴(kuò)散的風(fēng)險(xiǎn)谈火。如果編譯器比較聰明,每個(gè)程序集只生成一個(gè),或許可以緩解這種情況,但我們從匿名類(lèi)型了解到,這種重復(fù)數(shù)據(jù)刪除技術(shù)非常困難,而且很容易出錯(cuò)侈询。
如果我們?cè)试S泛型類(lèi)型擁有外觀約束的類(lèi)型參數(shù),那么同一個(gè)東西擁有多個(gè)見(jiàn)證結(jié)構(gòu)會(huì)導(dǎo)致實(shí)例化的泛型類(lèi)型具有不同的類(lèi)型標(biāo)識(shí),無(wú)法互換。
人們還擔(dān)心外觀和擴(kuò)展綁定得太緊糯耍。他們認(rèn)為,那將來(lái)可能會(huì)引起混淆扔字。
對(duì)此,Mads答復(fù)說(shuō):
合并:在我的提案里,“擴(kuò)展”實(shí)際上合并了多個(gè)問(wèn)題:
[……]
我覺(jué)得,對(duì)于上述服務(wù)于所有這些目的的語(yǔ)言機(jī)制,有太多內(nèi)容需要討論——但歸根結(jié)底,它們的關(guān)系非常密切。如果有一個(gè)提案可以將它們清晰地分開(kāi),那將是非常有意義的温技。那也許會(huì)更加簡(jiǎn)單有效啦租。
查看英文原文:.NET Futures: Type Classes and Extensions
本文永久更新鏈接地址:http://www.linuxidc.com/Linux/2017-04/142894.htm
在Elasticsearch中應(yīng)用機(jī)器學(xué)習(xí)排序LTR
Log4J的Appenders配置
相關(guān)資訊
.NET
MailKit正式替換了.NET的 (今 09:11)
Microsoft規(guī)劃了.NET的未來(lái)發(fā)展 (02月09日)
.NET平臺(tái)上的分布式編程框架MBrace (11/23/2015 10:22:19)
.NET 誕生 15 周年 (02月14日)
為什么.NET感覺(jué)上比Java差一點(diǎn) (10/02/2016 08:11:39)
.Net開(kāi)發(fā)框架最終版將與Windows 10 (07/2九度快排系統(tǒng) https://www.190seo.com5/2015 05:49:19)
本文評(píng)論
查看全部評(píng)論 (0)
表情:
姓名:
匿名
字?jǐn)?shù)
同意評(píng)論聲明
評(píng)論聲明
尊重網(wǎng)上道德,遵守中華人民共和國(guó)的各項(xiàng)有關(guān)法律法規(guī)
承擔(dān)一切因您的行為而直接或間接導(dǎo)致的民事或刑事法律責(zé)任
本站管理人員有權(quán)保留或刪除其管轄留言中的任意內(nèi)容
本站有權(quán)在網(wǎng)站內(nèi)轉(zhuǎn)載或引用您的評(píng)論
參與本評(píng)論即表明您已經(jīng)閱讀并接受上述條款
最新資訊
Log4J的Appenders配置
CentOS虛擬機(jī)和物理機(jī)共享文件夾實(shí)現(xiàn)
CentOS7.0下Rsync+sersync實(shí)現(xiàn)數(shù)據(jù)實(shí)時(shí)增量
Google Hire 首頁(yè)默默推出,LinkedIn 要小
.NET或?qū)⒁腩?lèi)型類(lèi)和擴(kuò)展
2017年會(huì)是Serverless爆發(fā)之年嗎?
Apache Tomcat信息泄露漏洞(CVE-2017-5651)
Trend Micro Threat Discovery Appliance命
Google gRPC 堆緩沖區(qū)溢出漏洞(CVE-2017-
Shadow Brokers 最新泄密暴露 NSA 與
背景:
閱讀新聞
Google Hire 首頁(yè)默默推出,LinkedIn 要小心了?
[日期:2017-04-18]
來(lái)源:癮科技
作者:Linux
[字體:大 中 小]
Google 即將要有個(gè)新的「人力雇用」用途的網(wǎng)站推出,它就叫做 Google Hire(怎么不叫 GooJob)。這個(gè)已經(jīng)開(kāi)放首頁(yè)但仍不可登入的入口網(wǎng)站,根據(jù)官方向我們 Engadget 所提供的說(shuō)法,這是個(gè)希望幫助 G Suite 用戶(hù)更有效率管理人力雇用事宜的開(kāi)發(fā)中產(chǎn)品荒揣。而盡管部分網(wǎng)站猜測(cè) Google Hire 可能會(huì)有類(lèi)似 LinkedIn 的求職社交功能,甚至有隱私方面的疑慮。不過(guò)這點(diǎn)根據(jù)官方在信件中給予我們的回覆,這個(gè)網(wǎng)站將只被用于接受求職申請(qǐng),并不會(huì)將相關(guān)私人信息乃至于 Google 中的使用者信息予以分享,所以現(xiàn)階段理應(yīng)是不太需要擔(dān)心會(huì)有這方面的狀況焊刹。
其實(shí)不僅 Google,就連 Facebook 近幾個(gè)月也已經(jīng)開(kāi)始提供求職相關(guān)的功能了,由此可見(jiàn)各家似乎都有點(diǎn)想利用自己在相關(guān)領(lǐng)域上的優(yōu)勢(shì),來(lái)挑戰(zhàn) LinkedIn 所開(kāi)啟的求職市場(chǎng)應(yīng)用系任。但到底能有多少效果或者是多高的使用率,顯然就還有待未來(lái)正式上線才能見(jiàn)真章了。
經(jīng)由: Engadget, Daily Mail, Android Authority
來(lái)源: Axios
本文永久更新鏈接地址:http://www.linuxidc.com/Linux/2017-04/142895.htm
2017年會(huì)是Serverless爆發(fā)之年嗎?
YouTube 放寬移動(dòng)設(shè)備直播資格,1000 以上訂閱數(shù)即可使用
相關(guān)資訊
LinkedIn Google Hire
LinkedIn 開(kāi)源 Kafka Cruise (今 10:57)
俄羅斯開(kāi)始屏蔽LinkedIn (11/17/2016 21:49:58)
LinkedIn開(kāi)源軟件項(xiàng)目數(shù)量已經(jīng)超過(guò) (08/08/2016 08:32:18)
搜索巨人開(kāi)發(fā)招聘網(wǎng)站 Google Hire (04月17日)
LinkedIn Test Butler旨在改進(jìn) (08/31/2016 08:42:46)
LinkedIn的工程師詳述了生產(chǎn)環(huán)境下 (06/22/2016 09:13:45)
本文評(píng)論
查看全部評(píng)論 (0)
表情:
姓名:
匿名
字?jǐn)?shù)
同意評(píng)論聲明
評(píng)論聲明
尊重網(wǎng)上道德,遵守中華人民共和國(guó)的各項(xiàng)有關(guān)法律法規(guī)
承擔(dān)一切因您的行為而直接或間接導(dǎo)致的民事或刑事法律責(zé)任
本站管理人員有權(quán)保留或刪除其管轄留言中的任意內(nèi)容
本站有權(quán)在網(wǎng)站內(nèi)轉(zhuǎn)載或引用您的評(píng)論
參與本評(píng)論即表明您已經(jīng)閱讀并接受上述條款
最新資訊
LinkedIn 開(kāi)源 Kafka Cruise Control
新勒索軟件“Defray”可通過(guò)Microsoft Word
排序算法之冒泡排序詳解
C++多態(tài)分析
Ubuntu 16.04 安裝搭建Red5流媒體服務(wù)器
Ubuntu 16.04下交叉編譯ImageMagick
關(guān)于開(kāi)源軟件,你所不知道的那些事情
Go 1.9引入了類(lèi)型別名并提升了運(yùn)行時(shí)和工具
GitHub正在尋找新的CEO
發(fā)達(dá)國(guó)家與發(fā)展中國(guó)家編程語(yǔ)言技術(shù)的分布差