如何在子類中重寫DerivedZ(),而無需在基類中指定U?後一種解決方案顯得有點過分。C#,使用self作爲基類的抽象重寫方法的參數
public abstract class Z {}
public class DerivedZ : Z
{
public DerivedZ (B someB, int num)
{
// initialize here
}
}
// will not compile
// error: 'B.GetZ(B, int)': no suitable method found to override
// error: 'B' does not implement inherited abstract member 'A<DerivedZ>.GetZ(A<DerivedZ>, int)'
public abstract class A<T> where T : Z
{
public abstract T GetZ (A<T> inputA, int optional=1);
}
public class B : A<DerivedZ>
{
public override DerivedZ GetZ (B someB, int optional=1)
{
return new DerivedZ (someB, optional)
}
}
這個工程雖然...
public abstract class A<T,U> where T : Z where U : A<T,U>
{
public abstract T GetZ (U inputA, int optional=1);
}
public class B : A<DerivedZ,B>
{
public override DerivedZ GetZ (B someB, int optional=1)
{
return new DerivedZ (someB, optional);
}
}
您已經展示瞭如何完成這項工作。錯誤信息(你沒有打算列出)很清楚爲什麼你的第一個解決方案不起作用。 – Servy
簡單的答案:你不能。 – MarcinJuraszek
'DerivedZ' *需要*接受'B',而不是'A'? 'B'中的'GetZ' *是否需要*接受'B'而不是'A '? –
Servy