假設我有一個抽象基類BaseTimeCollection
和至少一個從基類繼承的具體類ConcreteTimeCollection
。繼承ICollection的抽象基類<T>
我想我的基類從ICollection<T>
繼承。
繼承ICollection<T>
需要我提供許多方法的實現,包括IEnumerable.GetEnumerator()
和IEnumerable<T>.GetEnumerator
。
我不想實現BaseTimeCollection
這些方法 - 而不是我寧願單獨實現它們在我的每一個具體類的。
這是我遇到麻煩的地方。
的GetEnumerator
方法必須加以明確聲明,因爲有兩個他們倆的名稱相同,但不同的返回類型。 但是,似乎只要我明確表示簽名,就不能再使用抽象修飾符。本質上,我被迫在我的基類中實現了GetEnumerator
方法。
public abstract class BaseTimeCollection : ICollection<Time>
{
abstract IEnumerator IEnumerable.GetEnumerator(); // compile error: The modifier 'abstract' is not valid for this item
abstract IEnumerator<Time> IEnumerable<Time>.GetEnumerator(); // compile error: The modifier 'abstract' is not valid for this item
}
public class ConcreteTimeCollection : BaseTimeCollection
{
IEnumerator IEnumerable.GetEnumerator()
{
// this is where I would like to provide my implementation for IEnumerable.GetEnumerator()
}
IEnumerator<Time> IEnumerable<Time>.GetEnumerator()
{
// this is where I would like to provide my implementation for IEnumerable<Time>.GetEnumerator()
}
}
有什麼我錯過了?
有一些方法我可以推遲實施
GetEnumerator
方法的具體類?
什麼是你所得到的編譯錯誤? –