比方說,我有返回B類的一個實例C#:重寫屬性,並返回一個派生類型
public class A
{
public virtual B Details {get; set;}
}
讓我們也說了財產「詳細信息」 A類,我有一個類AEXT (A擴展),從A. 繼承,但我想那Aext.Details返回類Bext(B擴展)的一個實例:
public class Aext : A
{
public override Bext Details {get; set;}
}
這不能編譯,因爲類型Bext必須從繼承的類型相匹配。
當然,我可以很容易地解決這個問題,只需把B作爲Aext的Details的返回。
public class Aext
{
B Details {get; set;}
}
分配工作,但我得查,每次我用AEXT的實例,如果細節Bext或B.
你看到做一些清潔劑,這種解決方案的一種方式?
謝謝。
B是抽象類嗎? – Monah
@Hadi Hassan:不,B不是抽象類。 – zizou
我不認爲我理解你似乎在追求什麼設計,但是你面臨的問題是因爲C#不支持(非接口)虛擬方法中的協變返回類型。因此,您可以聲明一個帶有'Details'返回值的通用接口作爲其泛型類型參數,將其標記爲協變,並且能夠使用它併爲其分配,而不必知道確切的返回類型。 –