1

IList を実装する単純なクラスを作成しようとしました。ただし、最初に DiskBackedCollection を IList にキャストしない限り、メンバーは使用できません。キャストせずに使用できるようにするにはどうすればよいですか?

public partial class DiskBackedCollection<T> : IList<T>
{
    private List<T> _underlyingList = new List<T>();

    int IList<T>.IndexOf(T item)
    {
        return _underlyingList.IndexOf(item);
    }

    T IList<T>.this[int index]
    {
        get
        {
            return _underlyingList[index];
            throw new NotImplementedException();
        }
        set
        {
            throw new NotImplementedException();
        }
    }

    int ICollection<T>.Count
    {
        get
        {
            return _underlyingList.Count;
        }
    }

    IEnumerator<T> IEnumerable<T>.GetEnumerator()
    {
        return new DiskBackedCollectionEnumerator(this);
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return new DiskBackedCollectionEnumerator(this);
    }
}
4

2 に答える 2

2

メンバーそれぞれがIList<T>.目の前にいるからです。それを削除すると、表示されるはずです。

前に を付けてインターフェイス メンバーを実装することを、明示的な実装IList<T>.と呼びます。

于 2013-05-25T13:48:40.020 に答える
0

インターフェース要件を実装するメソッドは public でなければなりません。あなたのものではありません。

また、明示的な実装を削除する必要があります。

public int Count
{
  get
  {
    return _underlyingList.Count;
  }
}
于 2013-05-25T13:53:04.233 に答える