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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

使用接口的隱式運(yùn)算符

使用接口的隱式運(yùn)算符

C#
慕田峪4524236 2019-11-20 13:13:00
我有一個(gè)通用類,我正在嘗試為其實(shí)現(xiàn)隱式類型轉(zhuǎn)換。雖然大多數(shù)情況下都可以使用,但不適用于界面投射。經(jīng)過進(jìn)一步調(diào)查,我發(fā)現(xiàn)有一個(gè)編譯器錯(cuò)誤:“適用于用戶定義的接口轉(zhuǎn)換”。雖然我知道應(yīng)該在某些情況下強(qiáng)制執(zhí)行,但是我想做的事情似乎是合理的情況。這是一個(gè)例子:public class Foo<T> where T : IBar{    private readonly T instance;    public Foo(T instance)    {        this.instance = instance;    }    public T Instance    {        get { return instance; }    }    public static implicit operator Foo<T>(T instance)    {        return new Foo<T>(instance);    }}使用它的代碼:var concreteReferenceToBar = new ConcreteBar();IBar intefaceReferenceToBar = concreteReferenceToBar;Foo<ConcreteBar> concreteFooFromConcreteBar = concreteReferenceToBar;Foo<IBar> fooFromConcreteBar = concreteReferenceToBar;Foo<IBar> fooFromInterfaceBar = intefaceReferenceToBar; // doesn't work有誰知道解決方法,或者有人可以用令人滿意的方式解釋為什么我應(yīng)該interfaceReferenceToBar隱式轉(zhuǎn)換為Foo<IBar>,因?yàn)樵谖铱磥恚鼪]有被轉(zhuǎn)換,而僅包含在Foo中?編輯: 看起來協(xié)方差可能提供救贖。我們希望C#4.0規(guī)范允許使用協(xié)方差隱式轉(zhuǎn)換接口類型。
查看完整描述

2 回答

?
胡說叔叔

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

我同意您的意見,我不知道為什么他們將其在所有情況下都視為無效。在這種情況下,您可以在編譯時(shí)確定強(qiáng)制轉(zhuǎn)換是(應(yīng)該)有效的。

查看完整回答
反對(duì) 回復(fù) 2019-11-20
?
慕無忌1623718

TA貢獻(xiàn)1744條經(jīng)驗(yàn) 獲得超4個(gè)贊

您無法執(zhí)行此操作的原因是,在C#語言規(guī)范中明確禁止使用它:


如果滿足以下所有條件,則允許類或結(jié)構(gòu)聲明從源類型S到目標(biāo)類型T的轉(zhuǎn)換:


...

S和T都不是object或接口類型。


用戶定義的轉(zhuǎn)換不允許與interface-type進(jìn)行轉(zhuǎn)換 。特別是,此限制可確保在轉(zhuǎn)換為接口類型時(shí)不會(huì)發(fā)生用戶定義的轉(zhuǎn)換,并且 只有在要轉(zhuǎn)換的對(duì)象實(shí)際上實(shí)現(xiàn)了指定的接口類型時(shí),才能成功轉(zhuǎn)換為 接口類型。


查看完整回答
反對(duì) 回復(fù) 2019-11-20
  • 2 回答
  • 0 關(guān)注
  • 327 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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