Code:
/ 4.0 / 4.0 / untmp / 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
- GeneralTransform3DCollection.cs
- SqlStatistics.cs
- SendActivityEventArgs.cs
- MenuItemStyleCollectionEditor.cs
- SByte.cs
- EmbeddedMailObjectsCollection.cs
- LogEntryUtils.cs
- FormViewRow.cs
- TextEditorTables.cs
- Directory.cs
- TiffBitmapDecoder.cs
- fixedPageContentExtractor.cs
- ZipArchive.cs
- TouchFrameEventArgs.cs
- OracleCommandSet.cs
- PenContext.cs
- Types.cs
- EndpointAddressMessageFilterTable.cs
- SqlCacheDependency.cs
- FontDialog.cs
- AddressAlreadyInUseException.cs
- ImageListStreamer.cs
- DataGridViewLinkColumn.cs
- Queue.cs
- WindowsRegion.cs
- RegexCompilationInfo.cs
- PriorityItem.cs
- SafeViewOfFileHandle.cs
- BufferedOutputStream.cs
- ArrayMergeHelper.cs
- COM2ComponentEditor.cs
- ServiceOperationParameter.cs
- DiscreteKeyFrames.cs
- CurrentChangingEventManager.cs
- ProcessHost.cs
- CapiSafeHandles.cs
- Rectangle.cs
- ConstraintConverter.cs
- LayoutEngine.cs
- RuntimeArgumentHandle.cs
- PageAsyncTaskManager.cs
- ReflectPropertyDescriptor.cs
- BuildDependencySet.cs
- OptimalBreakSession.cs
- RawStylusInputCustomData.cs
- ZoneIdentityPermission.cs
- BindingList.cs
- ParseElementCollection.cs
- TargetParameterCountException.cs
- Polyline.cs
- basecomparevalidator.cs
- RenderDataDrawingContext.cs
- NameValuePermission.cs
- HostedHttpContext.cs
- HyperLinkStyle.cs
- CompatibleComparer.cs
- TimeIntervalCollection.cs
- RoleServiceManager.cs
- RequestNavigateEventArgs.cs
- DefaultParameterValueAttribute.cs
- GeneralTransform3DTo2DTo3D.cs
- DataServiceHost.cs
- HtmlInputRadioButton.cs
- _BasicClient.cs
- SoapReflectionImporter.cs
- EndpointAddressMessageFilterTable.cs
- __Error.cs
- UrlMappingsModule.cs
- FontFamilyConverter.cs
- FontNamesConverter.cs
- DefaultValueTypeConverter.cs
- TableCellCollection.cs
- SystemIPInterfaceProperties.cs
- ToolStripProfessionalLowResolutionRenderer.cs
- PermissionListSet.cs
- NavigateEvent.cs
- DateTimeFormatInfo.cs
- ColumnMap.cs
- MenuItemStyleCollectionEditor.cs
- FixedSOMTableCell.cs
- SqlRowUpdatingEvent.cs
- FaultDescription.cs
- TextBlockAutomationPeer.cs
- Vector3DConverter.cs
- NavigatingCancelEventArgs.cs
- DynamicEndpointElement.cs
- FormParameter.cs
- VersionedStreamOwner.cs
- XPathSelfQuery.cs
- InfiniteIntConverter.cs
- DataGridViewColumnDesigner.cs
- DBNull.cs
- Brush.cs
- InfoCardRSAPKCS1SignatureFormatter.cs
- DesignerAutoFormatCollection.cs
- AbsoluteQuery.cs
- OracleCommand.cs
- Part.cs
- State.cs
- SchemaConstraints.cs