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)定義的行為約束。
成本將是巨大的,因此收益最好是巨大的。我在這里沒有看到巨大的好處。

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)。那么,什么是引人注目的收益?

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)建“特殊”行
我沒有看到其他方式如何編碼這樣的類
- 3 回答
- 0 關(guān)注
- 784 瀏覽
添加回答
舉報(bào)