ICollection.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / clr / src / BCL / System / Collections / Generic / ICollection.cs / 1305376 / ICollection.cs

                            // ==++== 
//
//   Copyright (c) Microsoft Corporation.  All rights reserved.
//
// ==--== 
/*============================================================
** 
** Interface:  ICollection 
**
** [....] 
**
**
** Purpose: Base interface for all generic collections.
** 
**
===========================================================*/ 
namespace System.Collections.Generic { 
    using System;
    using System.Runtime.CompilerServices; 
    using System.Diagnostics.Contracts;

    // Base interface for all collections, defining enumerators, size, and
    // synchronization methods. 

    // Note that T[] : IList, and we want to ensure that if you use 
    // IList, we ensure a YourValueType[] can be used 
    // without jitting.  Hence the TypeDependencyAttribute on SZArrayHelper.
    // This is a special hack internally though - see VM\compile.cpp. 
    // The same attribute is on IEnumerable and ICollection.
    [ContractClass(typeof(ICollectionContract<>))]
    [TypeDependencyAttribute("System.SZArrayHelper")]
    public interface ICollection : IEnumerable 
    {
        // Number of items in the collections. 
        int Count { get; } 

        bool IsReadOnly { get; } 

        void Add(T item);

        void Clear(); 

        bool Contains(T item); 
 
        // CopyTo copies a collection into an Array, starting at a particular
        // index into the array. 
        //
        void CopyTo(T[] array, int arrayIndex);

        //void CopyTo(int sourceIndex, T[] destinationArray, int destinationIndex, int count); 

        bool Remove(T item); 
    } 

    [ContractClassFor(typeof(ICollection<>))] 
    internal class ICollectionContract : ICollection
    {
        int ICollection.Count {
            get { 
                Contract.Ensures(Contract.Result() >= 0);
                return default(int); 
            } 
        }
 
        bool ICollection.IsReadOnly {
            get { return default(bool); }
        }
 
        void ICollection.Add(T item)
        { 
            //Contract.Ensures(((ICollection)this).Count == Contract.OldValue(((ICollection)this).Count) + 1);  // not threadsafe 
        }
 
        void ICollection.Clear()
        {
        }
 
        bool ICollection.Contains(T item)
        { 
            return default(bool); 
        }
 
        void ICollection.CopyTo(T[] array, int arrayIndex)
        {
        }
 
        bool ICollection.Remove(T item)
        { 
            return default(bool); 
        }
 
        IEnumerator IEnumerable.GetEnumerator()
        {
            Contract.Ensures(Contract.Result>() != null);
            return default(IEnumerator); 
        }
 
        IEnumerator IEnumerable.GetEnumerator() 
        {
            Contract.Ensures(Contract.Result() != null); 
            return default(IEnumerator);
        }
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK