第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么C#泛型不能像C ++模板那樣從其中一個泛型類型參數(shù)派生出來?

為什么C#泛型不能像C ++模板那樣從其中一個泛型類型參數(shù)派生出來?

蝴蝶刀刀 2019-11-18 14:19:20
為什么C#泛型不能像C ++模板那樣從其中一個泛型類型參數(shù)派生出來?我的意思是我知道這是不可能的,因?yàn)镃LR不支持此功能,但是為什么呢?我知道C ++模板和C#泛型之間的深刻區(qū)別-前者是編譯時實(shí)體,必須在編譯期間解決,而后者是一流的運(yùn)行時實(shí)體。但是,我仍然看不到CLR設(shè)計(jì)者沒有提出最終使CLR泛型類型從其泛型類型參數(shù)之一派生的方案的原因。畢竟,這將是非常有用的功能,我個人非常想念它。編輯:我想知道一個核心問題,即解決該問題會在實(shí)施此功能時產(chǎn)生高昂的代價,因此尚無法實(shí)施。例如,檢查以下虛構(gòu)聲明:class C<T> : T{}正如埃里克·利珀特(Eric Lippert)所注意到的,如果“ 如果T是一個結(jié)構(gòu),該怎么辦?如果T是一個密封的類類型,該怎么辦?如果T是一個接口類型,該怎么辦?如果T是C,該怎么辦?!如果T是從C派生的類,該怎么辦?如果T是具有抽象方法的抽象類型;如果T具有比C少的可訪問性,該怎么辦?如果T是System.ValueType,該怎么辦?(您可以有一個繼承自System.ValueType的非結(jié)構(gòu)嗎?)關(guān)于System.Delegate, System.Enum,依此類推? ”正如埃里克(Eric)繼續(xù)所說的那樣,“ 那些是容易的,顯而易見的 ”。的確,他是對的。我對一些既不容易也不明顯的問題的具體例子感興趣,這很難解決。
查看完整描述

3 回答

?
胡說叔叔

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超8個贊

好吧,首先問問自己可能有什么問題class C<T> : T { }。立刻想到了很多事情:

如果T是一個結(jié)構(gòu)怎么辦?如果T是密封類類型怎么辦?如果T是接口類型怎么辦?如果T是C<T>?如果T是從中派生的類C<T>怎么辦?如果T是具有抽象方法的抽象類型怎么辦?如果T具有比C少的可訪問性怎么辦?如果T是System.ValueType怎么辦?(您可以有一個繼承自System.ValueType的非結(jié)構(gòu)嗎?)System.Delegate,System.Enum等如何?

這些是簡單,顯而易見的。提議的功能實(shí)際上打開了數(shù)百個(如果不是數(shù)千個)關(guān)于類型與其基類型之間的交互的更微妙的問題,所有這些問題都必須仔細(xì)指定,實(shí)現(xiàn)和測試。毫無疑問,我們會錯過某些內(nèi)容,從而在將來造成重大更改,或者使運(yùn)行時受實(shí)現(xiàn)定義的行為約束。

成本將是巨大的,因此收益最好是巨大的。我在這里沒有看到巨大的好處。


查看完整回答
反對 回復(fù) 2019-11-18
?
慕碼人2483693

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超9個贊

好吧,如果您不喜歡我以前的回答,那么讓我們采取另一種方法。

你的問題的先決條件是謊言:我們需要一個理由執(zhí)行一個功能。相反,我們需要一個非常非常好的理由來實(shí)現(xiàn)任何功能。功能的前期成本,維護(hù)成本和機(jī)會成本非常昂貴。(也就是說,您花在功能X上的時間就是您不能花在執(zhí)行功能Y上的時間,這可能會阻止您執(zhí)行功能Z。)為了負(fù)責(zé)任地為我們的客戶和利益相關(guān)者提供價值,我們無法實(shí)施所有功能有人碰巧喜歡

不能由運(yùn)行時設(shè)計(jì)者來證明為什么他們沒有實(shí)現(xiàn)您認(rèn)為特別好的功能。根據(jù)功能的成本和對用戶的好處來對功能進(jìn)行優(yōu)先級排序,并且用戶并沒有完全要求我進(jìn)行此類繼承。這個特殊功能將極大地改變類型系統(tǒng)的分析在運(yùn)行時的工作方式,對使用泛型的每種語言產(chǎn)生深遠(yuǎn)的影響,并且對我來說幾乎沒有好處。

我們在用C ++編寫的編譯器中使用這種繼承,并且所生成的代碼難以理解,難以維護(hù)且難以調(diào)試。我一直在盡力逐步消除這樣的代碼。我反對在C#中啟用相同類型的錯誤模式,除非這樣做具有巨大的吸引力。

以令人信服的方式描述巨大利益的任務(wù)是由想要該功能的人員而不是必須實(shí)施該功能的人員承擔(dān)。那么,什么是引人注目的收益?


查看完整回答
反對 回復(fù) 2019-11-18
?
HUX布斯

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超6個贊

可以幫助的代碼示例:


public class SpecialDataRow<T> : T where T : DataRow

{

    public int SpecialFactor { get; set; }

}

這將使您能夠從DataRow以及任何派生的DataRows(如鍵入的數(shù)據(jù)集生成的數(shù)據(jù)行)中創(chuàng)建“特殊”行


我沒有看到其他方式如何編碼這樣的類


查看完整回答
反對 回復(fù) 2019-11-18
  • 3 回答
  • 0 關(guān)注
  • 784 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號