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

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

為什么C#構(gòu)造函數(shù)不能推斷類型?

為什么C#構(gòu)造函數(shù)不能推斷類型?

C#
縹緲止盈 2019-07-24 19:53:32
為什么C#構(gòu)造函數(shù)不能推斷類型?為什么構(gòu)造函數(shù)不支持類型推斷,就像通用方法一樣?public class MyType<T>{    private readonly T field;    public MyType(T value) { field = value; }}var obj = new MyType(42); // why can't type inference work out that I want a MyType<int>?雖然你可以用工廠類解決這個問題,public class MyTypeFactory{    public static MyType<T> Create<T>(T value)    {       return new MyType<T>(value);    }}var myObj = MyTypeFactory.Create(42);構(gòu)造函數(shù)不支持類型推斷是否存在實際或哲學(xué)原因?
查看完整描述

3 回答

?
慕姐8265434

TA貢獻(xiàn)1813條經(jīng)驗 獲得超2個贊

有沒有一個哲學(xué)上的原因,為什么構(gòu)造函數(shù)不能支持類型推斷?

不,當(dāng)你有

new Foo(bar)

然后我們可以在范圍內(nèi)識別所有稱為Foo的類型,而不管通用arity,然后使用修改的方法類型推斷算法對每個類型執(zhí)行重載解析。然后,我們必須創(chuàng)建一個“更好”算法,該算法確定兩個類型中具有相同名稱但不同通用arity的兩個適用構(gòu)造函數(shù)一個是更好的構(gòu)造函數(shù)。為了保持向后兼容性,非泛型類型的ctor必須始終獲勝。

是否有一個實際的原因,為什么構(gòu)造函數(shù)不能支持類型推斷?

是。即使該功能的好處超過其成本 - 這是相當(dāng)大的 - 但這還不足以實現(xiàn)功能。這個功能不僅必須是一個凈贏,它必須是一個巨大的凈勝利,相比我們可能投資的所有其他可能的功能。它還必須比花費時間和精力修復(fù)bug,性能更好工作,以及我們可以付出努力的其他可能領(lǐng)域。理想情況下,它必須適合發(fā)布的“主題”。

此外,正如您正確指出的那樣,通過使用工廠模式,您可以獲得此功能的好處,而無需實際擁有該功能。易于使用的變通方法使得功能實現(xiàn)的可能性降低。

此功能已在很長一段時間內(nèi)列在可能的功能列表中。它實際上從未在列表中足夠高的地方實現(xiàn)。


查看完整回答
反對 回復(fù) 2019-07-24
?
哈士奇WWW

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

public class MyType<T> { 
   private readonly T field; 
   public MyType(T value) { field = value; } }

他們可以,沒有必要再次告訴構(gòu)造函數(shù)“T是什么”,因為你已經(jīng)在課堂上已經(jīng)完成了這一點。

還您的工廠是不正確,你需要有public class MyTypeFactory<T>不只是public class MyTypeFactory-除非你聲明里面的工廠MyType

編輯更新:

那么,42是長,短,是int還是其他什么?

假設(shè)您有以下內(nèi)容

class Base{
   public virtual void DoStuff() { Console.WriteLine("Base"); }}class Foo : Base{
   public override void DoStuff() { Console.WriteLine("Foo");  }}

然后你做到了這一點

var c = new Foo();var myType = new MyType(c);

你期望foo被使用,還是base?我們需要告訴編譯器代替使用什么T

當(dāng)你真的想要打字 base

因此

var myType = new MyType<Base>(c);


查看完整回答
反對 回復(fù) 2019-07-24
?
揚帆大魚

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

泛型類型推斷不能像你希望的那樣對構(gòu)造函數(shù)起作用的主要原因是因為當(dāng)你聲明的所有類都是“MyType <T>”時,類“MyType”甚至不存在。請記住,同時擁有兩者是合法的:

public class MyType<T> {}

public class MyType {}

兩者都是合法的。如果您確實聲明了兩者,并且它們都聲明了沖突的構(gòu)造函數(shù),那么您將如何消除語法歧義?


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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