簡體   English   中英

C# 可以覆蓋派生類的返回類型嗎?

[英]C# Possible to override a return type on derived classes?

class base{
    ....
    public string name();
    ....
}

class deriveda : base{
    ....
    public override string name();
    ....
}

class derivedb : base{
    ....
    public override string name();
    ....
}

class derivedc : base{
    ....
    public override foo name();
    ....
}

在我的大多數派生類中,它是一致的,但其中一個我想返回自定義類類型,這可能嗎?

簡短的回答是否定的。

想想看,以后怎么用?

base b = new derivedc ()

進而? b.name()的返回類型是什么? string foo

但是,您可以使用泛型來控制它(盡管我不確定它是否適合您的用例):

class base<T>{
    ....
    public virtual T name();
    ....
}

class deriveda : base<string>{
    ....
    public override string name();
    ....
}

class derivedb : base<string>{
    ....
    public override string name();
    ....
}

class derivedc : base<foo>{
    ....
    public override foo name();
    ....
}

在 c# 9 中,是的,這應該是可能的,只要新類型滿足協方差規則,特別是更派生的引用類型。 它會起作用。

,這是不可能的。 正如其他人指出的那樣,編譯器無法區分僅返回類型不同的函數(因為返回類型不是函數簽名的一部分)。

一種解決方法(可能在你的情況不工作)是讓你的返回類型是基類函數的返回類型的子類,如所描述這里 但是, foo 不能從 string 派生,因為 string 是一個密封類。 你可以從預定義的類型派生像串最接近的是定義如圖所示的字符串擴展方法在這里

Ofir 的答案可能是您的最佳選擇,但這可能會給您其他想法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM