我有這樣的界面
interface IFoo
{
protected abstract int Compute();
int ComputeValue()
{
return Compute();
}
}
這個想法是Compute計算一些值并ComputeValue可能進行一些檢查,然后呼叫Compute以獲取實際值。但是,我現在想知道如何在抽象類中實作這個介面。我可以這樣做
abstract class Bar : IFoo
{
public abstract int Compute();
}
但我不想Compute被直接呼叫。但是,當我嘗試明確地實作它時,例如
abstract class Bar : IFoo
{
abstract int IFoo.Compute();
}
我不能在抽象類中將它定義為抽象Bar,這正是我想要的。當然,我可以做類似的事情
abstract class Bar : IFoo
{
protected abstract int Compute();
int IFoo.Compute()
{
return Compute();
}
}
但我想知道是否有一種更優雅的方法可以做到這一點而無需額外的額外方法?
uj5u.com熱心網友回復:
在這里你能做的不多。盡管根據草案規范,它在某些時候被認為允許在類中支持顯式介面抽象覆寫(另見重新抽象部分):
因為我們在介面中支持顯式抽象覆寫,所以我們也可以在類中這樣做
abstract class E : IA, IB, IC // ok
{
abstract void IA.M();
}
未解決的問題:我們應該在類中支持顯式介面抽象覆寫嗎?
但它似乎沒有通過 - 請參閱LDM-2019-03-27 注意事項:
類中的顯式介面抽象覆寫
是否也允許類中的抽象介面實作?不是實作介面方法的抽象類方法。
因此,要么Compute從界面中洗掉,要么使用您當前的方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/513880.html
