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
- DataGridDefaultColumnWidthTypeConverter.cs
- ToolStripArrowRenderEventArgs.cs
- Stylesheet.cs
- CodeDOMProvider.cs
- ActiveXHost.cs
- TransportSecurityProtocol.cs
- SelectorAutomationPeer.cs
- FileRegion.cs
- SecurityCriticalDataForSet.cs
- CustomPopupPlacement.cs
- DocumentOrderComparer.cs
- XmlQualifiedName.cs
- TypeUtil.cs
- FacetChecker.cs
- ComProxy.cs
- XmlDomTextWriter.cs
- ConsoleCancelEventArgs.cs
- ConditionalBranch.cs
- DynamicRendererThreadManager.cs
- LookupNode.cs
- SignatureDescription.cs
- TextEndOfParagraph.cs
- ReadOnlyDictionary.cs
- HttpProfileGroupBase.cs
- PenContexts.cs
- FileVersion.cs
- EntryIndex.cs
- MailMessageEventArgs.cs
- DataTablePropertyDescriptor.cs
- EmbeddedObject.cs
- AspNetSynchronizationContext.cs
- CqlQuery.cs
- SBCSCodePageEncoding.cs
- DtrList.cs
- HybridDictionary.cs
- ArrayWithOffset.cs
- ReadOnlyCollectionBuilder.cs
- Binding.cs
- ConfigurationValue.cs
- SingleTagSectionHandler.cs
- Camera.cs
- ObjectListFieldCollection.cs
- SqlComparer.cs
- GrammarBuilder.cs
- OperationCanceledException.cs
- SqlConnectionHelper.cs
- WhitespaceRuleLookup.cs
- RemotingHelper.cs
- SecurityTokenProvider.cs
- GuidelineSet.cs
- BitmapMetadataEnumerator.cs
- HttpCacheVaryByContentEncodings.cs
- TrackBar.cs
- CombinedGeometry.cs
- CharAnimationUsingKeyFrames.cs
- PropertyNames.cs
- FrameworkContentElementAutomationPeer.cs
- ConsoleTraceListener.cs
- ReadWriteControlDesigner.cs
- PathParser.cs
- XmlIgnoreAttribute.cs
- SqlAggregateChecker.cs
- WorkflowRuntimeSection.cs
- ScriptManagerProxy.cs
- Math.cs
- StorageFunctionMapping.cs
- cookiecollection.cs
- SHA512.cs
- InkCanvasSelection.cs
- LambdaCompiler.Unary.cs
- parserscommon.cs
- ShaperBuffers.cs
- DataGridViewTextBoxCell.cs
- WorkflowMessageEventArgs.cs
- TickBar.cs
- SimpleWorkerRequest.cs
- CompoundFileStorageReference.cs
- RequestNavigateEventArgs.cs
- DocumentXPathNavigator.cs
- XmlNotation.cs
- ACE.cs
- CompressStream.cs
- TargetFrameworkUtil.cs
- ApplicationSettingsBase.cs
- UserPreference.cs
- ContainerUIElement3D.cs
- SystemFonts.cs
- XmlQueryCardinality.cs
- UseLicense.cs
- SiteMapDataSourceView.cs
- WebPartZoneCollection.cs
- SpeechUI.cs
- oledbmetadatacollectionnames.cs
- OleDbWrapper.cs
- Span.cs
- ServiceConfigurationTraceRecord.cs
- EntityDataReader.cs
- CommandBinding.cs
- FilterEventArgs.cs
- BindingSource.cs