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

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

C#支持返回類型協(xié)方差嗎?

C#支持返回類型協(xié)方差嗎?

千萬里不及你 2019-06-20 15:29:42
C#支持返回類型協(xié)方差嗎?我正在使用.NET框架,我非常希望能夠制作一個自定義類型的頁面,我的所有網(wǎng)站都使用它。當(dāng)我試圖從控件訪問頁面時,問題就出現(xiàn)了。我希望能夠返回特定類型的頁面,而不是默認(rèn)頁面。有什么辦法嗎?public class MyPage : Page{     // My own logic}public class MyControl : Control{     public MyPage Page { get; set; }}
查看完整描述

3 回答

?
慕的地10843

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

聽起來你想要的是返回類型的協(xié)方差。C#不支持返回類型協(xié)方差。

返回類型協(xié)方差是覆蓋一個基類方法的地方,該方法返回一個不太特定的類型,而返回一個更特定的類型:

abstract class Enclosure{
    public abstract Animal Contents();}class Aquarium : Enclosure{
    public override Fish Contents() { ... }}

這是安全的,因為消費者的內(nèi)容通過封閉期待動物,水族館承諾不僅滿足這一要求,而且,作出更嚴(yán)格的承諾:動物永遠(yuǎn)是一條魚。

這種協(xié)方差在C#中是不支持的,也不太可能被支持。CLR不支持它。(C+和CLR上的C+/CLI實現(xiàn)都支持它;它是通過生成我下面建議的那種神奇的助手方法來實現(xiàn)的。)

(有些語言也支持形式參數(shù)類型逆變-您可以用獲取動物的方法覆蓋接受魚的方法。同樣,契約已經(jīng)完成;基類要求處理任何魚,派生類承諾不僅處理魚,而且處理任何動物。類似地,C#和CLR不支持形式參數(shù)類型反方差。)

解決此限制的方法是執(zhí)行以下操作:

abstract class Enclosure{
    protected abstract Animal GetContents();
    public Animal Contents() { return this.GetContents(); }}class Aquarium : Enclosure{
    protected override Animal GetContents() { return this.Contents(); }
    public new Fish Contents() { ... }}

現(xiàn)在,您既可以使用重寫虛擬方法的功能,也可以在使用編譯時類型水族館時獲得更強(qiáng)的輸入功能。


查看完整回答
反對 回復(fù) 2019-06-20
?
瀟瀟雨雨

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

將其放置在MyControl對象中將有效:

 public new MyPage Page {get return (MyPage)Page; set;}'

您不能覆蓋該屬性,因為它返回一個不同的類型.但你可以重新定義它。

在這個例子中不需要協(xié)方差,因為它比較簡單。您所做的就是繼承基本對象Page從…MyPage..任何Control你想要回來MyPage而不是Page需要重新定義Page的屬性Control


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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