Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / clr / src / BCL / System / Collections / ICollection.cs / 1305376 / ICollection.cs
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
/*============================================================
**
** Interface: ICollection
**
** [....]
**
**
** Purpose: Base interface for all collections.
**
**
===========================================================*/
namespace System.Collections {
using System;
using System.Diagnostics.Contracts;
// Base interface for all collections, defining enumerators, size, and
// synchronization methods.
[ContractClass(typeof(ICollectionContract))]
[System.Runtime.InteropServices.ComVisible(true)]
public interface ICollection : IEnumerable
{
// Interfaces are not serialable
// CopyTo copies a collection into an Array, starting at a particular
// index into the array.
//
void CopyTo(Array array, int index);
// Number of items in the collections.
int Count
{ get; }
// SyncRoot will return an Object to use for synchronization
// (thread safety). You can use this object in your code to take a
// lock on the collection, even if this collection is a wrapper around
// another collection. The intent is to tunnel through to a real
// implementation of a collection, and use one of the internal objects
// found in that code.
//
// In the absense of a static Synchronized method on a collection,
// the expected usage for SyncRoot would look like this:
//
// ICollection col = ...
// lock (col.SyncRoot) {
// // Some operation on the collection, which is now thread safe.
// // This may include multiple operations.
// }
//
//
// The system-provided collections have a static method called
// Synchronized which will create a thread-safe wrapper around the
// collection. All access to the collection that you want to be
// thread-safe should go through that wrapper collection. However, if
// you need to do multiple calls on that collection (such as retrieving
// two items, or checking the count then doing something), you should
// NOT use our thread-safe wrapper since it only takes a lock for the
// duration of a single method call. Instead, use Monitor.Enter/Exit
// or your language's equivalent to the C# lock keyword as mentioned
// above.
//
// For collections with no publically available underlying store, the
// expected implementation is to simply return the this pointer. Note
// that the this pointer may not be sufficient for collections that
// wrap other collections; those should return the underlying
// collection's SyncRoot property.
Object SyncRoot
{ get; }
// Is this collection synchronized (i.e., thread-safe)? If you want a
// thread-safe collection, you can use SyncRoot as an object to
// synchronize your collection with. If you're using one of the
// collections in System.Collections, you could call the static
// Synchronized method to get a thread-safe wrapper around the
// underlying collection.
bool IsSynchronized
{ get; }
}
[ContractClassFor(typeof(ICollection))]
internal class ICollectionContract : ICollection
{
void ICollection.CopyTo(Array array, int index)
{
}
int ICollection.Count {
get {
Contract.Ensures(Contract.Result() >= 0);
return default(int);
}
}
Object ICollection.SyncRoot {
get {
Contract.Ensures(Contract.Result
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SchemaCollectionCompiler.cs
- RepeatButtonAutomationPeer.cs
- IDictionary.cs
- DesignTableCollection.cs
- Ipv6Element.cs
- ZoneMembershipCondition.cs
- ClaimTypes.cs
- DbProviderFactoriesConfigurationHandler.cs
- DataBindingCollection.cs
- UnsafeNativeMethods.cs
- SiteMapDataSource.cs
- securestring.cs
- SerTrace.cs
- GraphicsContext.cs
- XPathAncestorIterator.cs
- DrawingState.cs
- Stream.cs
- PkcsUtils.cs
- NonBatchDirectoryCompiler.cs
- XmlValidatingReaderImpl.cs
- CompiledQueryCacheEntry.cs
- XhtmlTextWriter.cs
- OrElse.cs
- VisualStateManager.cs
- recordstatefactory.cs
- InstanceDataCollectionCollection.cs
- SqlCacheDependency.cs
- TableRowGroupCollection.cs
- ByteConverter.cs
- ShapingEngine.cs
- HostedBindingBehavior.cs
- ServiceNameElement.cs
- StaticSiteMapProvider.cs
- ApplicationGesture.cs
- FactoryGenerator.cs
- FilteredAttributeCollection.cs
- WriteFileContext.cs
- DtdParser.cs
- RelationshipType.cs
- ServiceEndpoint.cs
- TextElementCollection.cs
- XmlSchemaSimpleTypeUnion.cs
- CompilerParameters.cs
- SiteMapNodeItem.cs
- RemotingClientProxy.cs
- PersistChildrenAttribute.cs
- DirectoryInfo.cs
- CatalogPart.cs
- BodyWriter.cs
- TagMapInfo.cs
- ContractHandle.cs
- EntitySetRetriever.cs
- DependencyObjectProvider.cs
- DataSvcMapFileSerializer.cs
- MemberAccessException.cs
- XmlDocumentSerializer.cs
- StructuredTypeInfo.cs
- XmlSchemaSubstitutionGroup.cs
- EventItfInfo.cs
- EmissiveMaterial.cs
- RecordsAffectedEventArgs.cs
- DynamicMethod.cs
- ObjectPersistData.cs
- Trace.cs
- AppearanceEditorPart.cs
- PageStatePersister.cs
- TraceFilter.cs
- LicFileLicenseProvider.cs
- OraclePermissionAttribute.cs
- BuildProviderAppliesToAttribute.cs
- SqlConnectionString.cs
- DynamicResourceExtension.cs
- StrongNamePublicKeyBlob.cs
- MailWriter.cs
- SubpageParagraph.cs
- SequentialOutput.cs
- TimeoutException.cs
- FontNamesConverter.cs
- XmlEntityReference.cs
- DispatcherHookEventArgs.cs
- CopyAttributesAction.cs
- ViewStateModeByIdAttribute.cs
- IconHelper.cs
- GridLengthConverter.cs
- OLEDB_Enum.cs
- CheckBoxRenderer.cs
- Baml2006KeyRecord.cs
- KnownBoxes.cs
- XmlCodeExporter.cs
- OdbcConnectionFactory.cs
- SQLBinary.cs
- ArraySubsetEnumerator.cs
- AttributeQuery.cs
- DataGridViewRowEventArgs.cs
- MembershipSection.cs
- DeflateEmulationStream.cs
- DataGridViewSortCompareEventArgs.cs
- CRYPTPROTECT_PROMPTSTRUCT.cs
- SmtpNetworkElement.cs
- MetadataCache.cs