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
- ReachVisualSerializer.cs
- WindowProviderWrapper.cs
- ItemsPresenter.cs
- DynamicQueryableWrapper.cs
- TransformCryptoHandle.cs
- GridViewRowCollection.cs
- SeekStoryboard.cs
- ParserStreamGeometryContext.cs
- UnsafeNativeMethodsPenimc.cs
- Operator.cs
- Internal.cs
- SqlErrorCollection.cs
- CompilerGeneratedAttribute.cs
- ProfilePropertySettings.cs
- Literal.cs
- MethodBody.cs
- ToolStripContainerDesigner.cs
- FaultContext.cs
- DesignerVerbCollection.cs
- PhysicalAddress.cs
- ApplyTemplatesAction.cs
- ExpressionEditorAttribute.cs
- BinaryNode.cs
- EventLogRecord.cs
- MasterPageBuildProvider.cs
- DiscoveryClientOutputChannel.cs
- ParameterReplacerVisitor.cs
- XamlTemplateSerializer.cs
- RealizationContext.cs
- PromptBuilder.cs
- ListControlBuilder.cs
- CodeTypeOfExpression.cs
- ValidationPropertyAttribute.cs
- NotificationContext.cs
- EllipseGeometry.cs
- CreateUserWizard.cs
- MorphHelper.cs
- TypeInitializationException.cs
- PageBreakRecord.cs
- DateTimeValueSerializer.cs
- HttpRuntime.cs
- TextSelectionProcessor.cs
- UInt64Storage.cs
- ProfilePropertyMetadata.cs
- ObjectRef.cs
- SpecularMaterial.cs
- Page.cs
- StaticExtensionConverter.cs
- WhitespaceRuleReader.cs
- PublisherMembershipCondition.cs
- TypeToken.cs
- Transform.cs
- ComponentCollection.cs
- EntitySqlQueryBuilder.cs
- HttpRuntime.cs
- WizardPanelChangingEventArgs.cs
- TimeSpanStorage.cs
- SelectionList.cs
- CreateUserWizardStep.cs
- ArrayHelper.cs
- VirtualPathUtility.cs
- Serializer.cs
- HttpInputStream.cs
- OracleParameterCollection.cs
- CompilerError.cs
- TouchDevice.cs
- BufferModesCollection.cs
- querybuilder.cs
- SafeHandle.cs
- EdmComplexTypeAttribute.cs
- WorkflowRuntimeServicesBehavior.cs
- SuppressMergeCheckAttribute.cs
- QuaternionRotation3D.cs
- SystemIPv6InterfaceProperties.cs
- TabRenderer.cs
- PropertyItemInternal.cs
- RsaSecurityTokenParameters.cs
- RNGCryptoServiceProvider.cs
- FamilyCollection.cs
- DesignerTransactionCloseEvent.cs
- SecurityUtils.cs
- TextUtf8RawTextWriter.cs
- ZipIOExtraFieldPaddingElement.cs
- WebPartVerbsEventArgs.cs
- UnauthorizedAccessException.cs
- CompilerWrapper.cs
- DataGridHeadersVisibilityToVisibilityConverter.cs
- Path.cs
- Message.cs
- PeerTransportListenAddressConverter.cs
- CodeDomSerializer.cs
- XamlVector3DCollectionSerializer.cs
- SHA256Managed.cs
- DrawingContextWalker.cs
- SchemaTableColumn.cs
- XmlSchemaDocumentation.cs
- TextTreeFixupNode.cs
- FormViewUpdatedEventArgs.cs
- Hash.cs
- IsolatedStorageFile.cs