using System; using System.Collections.Generic; using System.Text; using System.Linq; namespace Loyc.Collections { /// <summary>Helps you implement sources (read-only collections) by providing /// default implementations for most methods of <see cref="ICollection{T}"/> and /// <see cref="IReadOnlyCollection{T}"/>.</summary> /// <remarks> /// You only need to implement two methods yourself: /// <code> /// public abstract int Count { get; } /// public abstract Iterator<T> GetIterator(); /// </code> /// </remarks> [Serializable] public abstract class SourceBase<T> : IReadOnlyCollection<T>, ICollection<T> { #region ISource<T> Members public abstract int Count { get; } public abstract IEnumerator<T> GetEnumerator(); System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return GetEnumerator(); } #endregion #region ICollection<T> Members void ICollection<T>.Add(T item) { throw new NotSupportedException("Collection is read-only."); } void ICollection<T>.Clear() { throw new NotSupportedException("Collection is read-only."); } void ICollection<T>.CopyTo(T[] array, int arrayIndex) { ListExt.CopyTo(this, array, arrayIndex); } bool ICollection<T>.IsReadOnly { get { return true; } } bool ICollection<T>.Remove(T item) { throw new NotSupportedException("Collection is read-only."); } public bool Contains(T item) { return Enumerable.Contains(this, item); } #endregion } }
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.
This article, along with any associated source code and files, is licensed under The GNU Lesser General Public License (LGPLv3)