.NET或?qū)⒁腩愋皖惡蛿U(kuò)展_2

背景:


閱讀新聞

.NET或?qū)⒁腩愋皖惡蛿U(kuò)展

[日期:2017-04-18]

來源:infoq.com

作者:Jonathan Allen ,譯者 謝麗

[字體:大 中 小]

類型類是另外一項正被考慮引入.NET未來版本的特性。在提案“外觀和擴(kuò)展(Shapes and Extensions)”中,該特性被稱為外觀,它們將大幅提升.NET泛型的能力。Mads Torgersen這樣描述類型類:

接口抽象的是作為類型實例的對象和值的“外觀(shape)”。從根本上講,類型類背后的思想是抽象類型本身的外觀。而且,當(dāng)通過類型聲明引入需要的類型實現(xiàn)一個接口時,其他人可以在單獨(dú)的代碼中實現(xiàn)類型類。

類型類解決了一個長期存在的接口問題:它們無法處理靜態(tài)函數(shù)或操作符重載。這導(dǎo)致了一些問題,比如,在數(shù)學(xué)庫中,對于不同的數(shù)值數(shù)據(jù)類型,需要反復(fù)聲明相同的函數(shù)。

Mads總結(jié)道:

一般來說,外觀的聲明和接口聲明非常像,但它:

幾乎可以定義任意類型的成員(包括靜態(tài)成員)

可以通過擴(kuò)展實現(xiàn)

可以在特定的地方像類型一樣使用

最后一個限制很重要:外觀不是類型。外觀的主要目的是作為泛型的一種約束,限定類型參數(shù),保證它們有正確的外觀,并允許泛型聲明體使用那個外觀。

與外觀的思想緊密相關(guān)的是一種經(jīng)過改進(jìn)的擴(kuò)展語法。擴(kuò)展結(jié)構(gòu)幾乎可以為類型類提供任何東西,而不只是方法擴(kuò)展??紤]下面這個最簡單的例子:

Int32類型已經(jīng)提供了大部分內(nèi)容,但它缺少zero屬性。擴(kuò)展可以修復(fù)這個問題:

然后,你可以像下面這樣使用它:

實現(xiàn)

這實現(xiàn)起來需要一些接口和結(jié)構(gòu)方面的技巧。

Shapes被翻譯成了接口,每個成員(甚至是靜態(tài)成員)都轉(zhuǎn)換成了接口中的實例成員;

擴(kuò)展被翻譯成了結(jié)構(gòu),每個成員(甚至是靜態(tài)成員)轉(zhuǎn)換成了結(jié)構(gòu)中的實例成員;

如果擴(kuò)展實現(xiàn)了一個或多個彎管,則底層的結(jié)構(gòu)實現(xiàn)了那些外觀的底層接口。

通常,上述結(jié)構(gòu)被稱為“見證結(jié)構(gòu)(witness struct)”。它的存在可以證明一個類遵循外觀的規(guī)則。或者換句話說,該類在類型類中。

編譯器會將上述AddAll方法翻譯成如下代碼:

然后,上述見證結(jié)構(gòu)就可以用于向AddAll方法提供必要的功能。結(jié)構(gòu)可以直接在類型上調(diào)用方法或者根據(jù)需要使用擴(kuò)展結(jié)構(gòu)。

在類和接口中實現(xiàn)外觀

使用和我們擴(kuò)展基類及實現(xiàn)接口一樣的語法,類可以顯式實現(xiàn)一個外觀。然后,編譯器會提供相應(yīng)的見證結(jié)構(gòu)。

也可以將接口標(biāo)記為滿足外觀的要求。下面是一個例子:

由于IComparable和理論上的類型類之間存在一對一關(guān)系,所以我們不需要為擴(kuò)展結(jié)構(gòu)提供擴(kuò)展體。

泛型類型

事實證明,泛型類型有他們自己的問題。和泛型方法一樣,向泛型類添加外觀或者類型類作為類型約束需要額外提供一個類型參數(shù)。在泛型類上,由于類型參數(shù)的數(shù)量是其名稱的一部分,所以這會導(dǎo)致它和其它名稱相同的泛型類型發(fā)生沖突。

擴(kuò)展外觀

擴(kuò)展結(jié)構(gòu)不僅可以用于實現(xiàn)外觀,還可以擴(kuò)展它們。因此,你可以向現(xiàn)有的外觀中添加新方法、靜態(tài)方法及操作符。正如擴(kuò)展方法一樣,語法是一樣的,就像它們在底層類型上直接定義了一樣。

評論

總的來說,人們對于該特性的反應(yīng)不錯。不過,也有一些修改請求。例如,外觀目前必須顯式實現(xiàn)。有些開發(fā)人員希望,如果特定的類或接口不需要額外擴(kuò)展方法時,就由編譯器隱式實現(xiàn)。Mads列舉了這樣做的一些問題:

那可能會導(dǎo)致,為了見證以相同的方式應(yīng)用到同一類型的同一個外觀而生成許多結(jié)構(gòu)類型,有生成的類型過度擴(kuò)散的風(fēng)險。如果編譯器比較聰明,每個程序集只生成一個,或許可以緩解這種情況,但我們從匿名類型了解到,這種重復(fù)數(shù)據(jù)刪除技術(shù)非常困難,而且很容易出錯。

如果我們允許泛型類型擁有外觀約束的類型參數(shù),那么同一個東西擁有多個見證結(jié)構(gòu)會導(dǎo)致實例化的泛型類型具有不同的類型標(biāo)識,無法互換。

人們還擔(dān)心外觀和擴(kuò)展綁定得太緊。他們認(rèn)為,那將來可能會引起混淆。

對此,Mads答復(fù)說:

合并:在我的提案里,“擴(kuò)展”實際上合并了多個問題:

[……]

我覺得,對于上述服務(wù)于所有這些目的的語言機(jī)制,有太多內(nèi)容需要討論——但歸根結(jié)底,它們的關(guān)系非常密切。如果有一個提案可以將它們清晰地分開,那將是非常有意義的。那也許會更加簡單有效。

查看英文原文:.NET Futures: Type Classes and Extensions

本文永久更新鏈接地址:http://www.linuxidc.com/Linux/2017-04/142894.htm

linux

在Elasticsearch中應(yīng)用機(jī)器學(xué)習(xí)排序LTR

Log4J的Appenders配置

相關(guān)資訊

.NET

MailKit正式替換了.NET的 (今 09:11)

Microsoft規(guī)劃了.NET的未來發(fā)展 (02月09日)

.NET平臺上的分布式編程框架MBrace (11/23/2015 10:22:19)

.NET 誕生 15 周年 (02月14日)

為什么.NET感覺上比Java差一點(diǎn) (10/02/2016 08:11:39)

.Net開發(fā)框架最終版將與Windows 10 (07/2九度快排系統(tǒng) https://www.190seo.com5/2015 05:49:19)

本文評論

查看全部評論 (0)

表情: 表情

姓名:

匿名

字?jǐn)?shù)

同意評論聲明

評論聲明

尊重網(wǎng)上道德,遵守中華人民共和國的各項有關(guān)法律法規(guī)

承擔(dān)一切因您的行為而直接或間接導(dǎo)致的民事或刑事法律責(zé)任

本站管理人員有權(quán)保留或刪除其管轄留言中的任意內(nèi)容

本站有權(quán)在網(wǎng)站內(nèi)轉(zhuǎn)載或引用您的評論

參與本評論即表明您已經(jīng)閱讀并接受上述條款

最新資訊

Log4J的Appenders配置

CentOS虛擬機(jī)和物理機(jī)共享文件夾實現(xiàn)

CentOS7.0下Rsync+sersync實現(xiàn)數(shù)據(jù)實時增量

Google Hire 首頁默默推出,LinkedIn 要小

.NET或?qū)⒁腩愋皖惡蛿U(kuò)展

2017年會是Serverless爆發(fā)之年嗎?

Apache Tomcat信息泄露漏洞(CVE-2017-5651)

Trend Micro Threat Discovery Appliance命

Google gRPC 堆緩沖區(qū)溢出漏洞(CVE-2017-

Shadow Brokers 最新泄密暴露 NSA 與

背景:

閱讀新聞

Google Hire 首頁默默推出,LinkedIn 要小心了?

[日期:2017-04-18]

來源:癮科技

作者:Linux

[字體:大 中 小]

Google 即將要有個新的「人力雇用」用途的網(wǎng)站推出,它就叫做 Google Hire(怎么不叫 GooJob)。這個已經(jīng)開放首頁但仍不可登入的入口網(wǎng)站,根據(jù)官方向我們 Engadget 所提供的說法,這是個希望幫助 G Suite 用戶更有效率管理人力雇用事宜的開發(fā)中產(chǎn)品。而盡管部分網(wǎng)站猜測 Google Hire 可能會有類似 LinkedIn 的求職社交功能,甚至有隱私方面的疑慮。不過這點(diǎn)根據(jù)官方在信件中給予我們的回覆,這個網(wǎng)站將只被用于接受求職申請,并不會將相關(guān)私人信息乃至于 Google 中的使用者信息予以分享,所以現(xiàn)階段理應(yīng)是不太需要擔(dān)心會有這方面的狀況。

其實不僅 Google,就連 Facebook 近幾個月也已經(jīng)開始提供求職相關(guān)的功能了,由此可見各家似乎都有點(diǎn)想利用自己在相關(guān)領(lǐng)域上的優(yōu)勢,來挑戰(zhàn) LinkedIn 所開啟的求職市場應(yīng)用。但到底能有多少效果或者是多高的使用率,顯然就還有待未來正式上線才能見真章了。

經(jīng)由: Engadget, Daily Mail, Android Authority

來源: Axios

本文永久更新鏈接地址:http://www.linuxidc.com/Linux/2017-04/142895.htm

linux

2017年會是Serverless爆發(fā)之年嗎?

YouTube 放寬移動設(shè)備直播資格,1000 以上訂閱數(shù)即可使用

相關(guān)資訊

LinkedIn Google Hire

LinkedIn 開源 Kafka Cruise (今 10:57)

俄羅斯開始屏蔽LinkedIn (11/17/2016 21:49:58)

LinkedIn開源軟件項目數(shù)量已經(jīng)超過 (08/08/2016 08:32:18)

搜索巨人開發(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)

本文評論

查看全部評論 (0)

表情: 表情

姓名:

匿名

字?jǐn)?shù)

同意評論聲明

評論聲明

尊重網(wǎng)上道德,遵守中華人民共和國的各項有關(guān)法律法規(guī)

承擔(dān)一切因您的行為而直接或間接導(dǎo)致的民事或刑事法律責(zé)任

本站管理人員有權(quán)保留或刪除其管轄留言中的任意內(nèi)容

本站有權(quán)在網(wǎng)站內(nèi)轉(zhuǎn)載或引用您的評論

參與本評論即表明您已經(jīng)閱讀并接受上述條款

最新資訊

LinkedIn 開源 Kafka Cruise Control

新勒索軟件“Defray”可通過Microsoft Word

排序算法之冒泡排序詳解

C++多態(tài)分析

Ubuntu 16.04 安裝搭建Red5流媒體服務(wù)器

Ubuntu 16.04下交叉編譯ImageMagick

關(guān)于開源軟件,你所不知道的那些事情

Go 1.9引入了類型別名并提升了運(yùn)行時和工具

GitHub正在尋找新的CEO

發(fā)達(dá)國家與發(fā)展中國家編程語言技術(shù)的分布差

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,180評論 25 708
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,427評論 4 61
  • 天作孽,猶可違;自作孽,不可活。 《孟子》 句意:天降的災(zāi)禍還可以躲避,自己造成的罪孽是無法逃脫的。
    xcy無名閱讀 882評論 0 0
  • 個人簡介 李振海,男,號:一弘弘一。出生于江蘇無錫,十歲從師習(xí)連環(huán)畫,書法。1976年畢業(yè)于無錫輕工業(yè)學(xué)...
    藝術(shù)范閱讀 4,722評論 0 0
  • 為了做好閱讀啟蒙,抓住8歲以前這個黃金時期培養(yǎng)孩子的閱讀興趣和能力,小種子班每天有一個常規(guī)家庭作業(yè):家長...
    H家女閱讀 1,275評論 0 1

友情鏈接更多精彩內(nèi)容