Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / clr / src / BCL / System / Collections / CollectionBase.cs / 1305376 / CollectionBase.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== //------------------------------------------------------------------------------ //----------------------------------------------------------------------------- //[....] // namespace System.Collections { using System; using System.Diagnostics.Contracts; // Useful base class for typed read/write collections where items derive from object [Serializable] [System.Runtime.InteropServices.ComVisible(true)] public abstract class CollectionBase : IList { ArrayList list; protected CollectionBase() { list = new ArrayList(); } protected CollectionBase(int capacity) { list = new ArrayList(capacity); } protected ArrayList InnerList { get { if (list == null) list = new ArrayList(); return list; } } protected IList List { get { return (IList)this; } } [System.Runtime.InteropServices.ComVisible(false)] public int Capacity { get { return InnerList.Capacity; } set { InnerList.Capacity = value; } } public int Count { get { return list == null ? 0 : list.Count; } } public void Clear() { OnClear(); InnerList.Clear(); OnClearComplete(); } public void RemoveAt(int index) { if (index < 0 || index >= Count) throw new ArgumentOutOfRangeException("index", Environment.GetResourceString("ArgumentOutOfRange_Index")); Contract.EndContractBlock(); Object temp = InnerList[index]; OnValidate(temp); OnRemove(index, temp); InnerList.RemoveAt(index); try { OnRemoveComplete(index, temp); } catch { InnerList.Insert(index, temp); throw; } } bool IList.IsReadOnly { get { return InnerList.IsReadOnly; } } bool IList.IsFixedSize { get { return InnerList.IsFixedSize; } } bool ICollection.IsSynchronized { get { return InnerList.IsSynchronized; } } Object ICollection.SyncRoot { get { return InnerList.SyncRoot; } } void ICollection.CopyTo(Array array, int index) { InnerList.CopyTo(array, index); } Object IList.this[int index] { get { if (index < 0 || index >= Count) throw new ArgumentOutOfRangeException("index", Environment.GetResourceString("ArgumentOutOfRange_Index")); Contract.EndContractBlock(); return InnerList[index]; } set { if (index < 0 || index >= Count) throw new ArgumentOutOfRangeException("index", Environment.GetResourceString("ArgumentOutOfRange_Index")); Contract.EndContractBlock(); OnValidate(value); Object temp = InnerList[index]; OnSet(index, temp, value); InnerList[index] = value; try { OnSetComplete(index, temp, value); } catch { InnerList[index] = temp; throw; } } } bool IList.Contains(Object value) { return InnerList.Contains(value); } int IList.Add(Object value) { OnValidate(value); OnInsert(InnerList.Count, value); int index = InnerList.Add(value); try { OnInsertComplete(index, value); } catch { InnerList.RemoveAt(index); throw; } return index; } void IList.Remove(Object value) { OnValidate(value); int index = InnerList.IndexOf(value); if (index < 0) throw new ArgumentException(Environment.GetResourceString("Arg_RemoveArgNotFound")); OnRemove(index, value); InnerList.RemoveAt(index); try{ OnRemoveComplete(index, value); } catch { InnerList.Insert(index, value); throw; } } int IList.IndexOf(Object value) { return InnerList.IndexOf(value); } void IList.Insert(int index, Object value) { if (index < 0 || index > Count) throw new ArgumentOutOfRangeException("index", Environment.GetResourceString("ArgumentOutOfRange_Index")); Contract.EndContractBlock(); OnValidate(value); OnInsert(index, value); InnerList.Insert(index, value); try { OnInsertComplete(index, value); } catch { InnerList.RemoveAt(index); throw; } } public IEnumerator GetEnumerator() { return InnerList.GetEnumerator(); } protected virtual void OnSet(int index, Object oldValue, Object newValue) { } protected virtual void OnInsert(int index, Object value) { } protected virtual void OnClear() { } protected virtual void OnRemove(int index, Object value) { } protected virtual void OnValidate(Object value) { if (value == null) throw new ArgumentNullException("value"); Contract.EndContractBlock(); } protected virtual void OnSetComplete(int index, Object oldValue, Object newValue) { } protected virtual void OnInsertComplete(int index, Object value) { } protected virtual void OnClearComplete() { } protected virtual void OnRemoveComplete(int index, Object value) { } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== //------------------------------------------------------------------------------ //----------------------------------------------------------------------------- //[....] // namespace System.Collections { using System; using System.Diagnostics.Contracts; // Useful base class for typed read/write collections where items derive from object [Serializable] [System.Runtime.InteropServices.ComVisible(true)] public abstract class CollectionBase : IList { ArrayList list; protected CollectionBase() { list = new ArrayList(); } protected CollectionBase(int capacity) { list = new ArrayList(capacity); } protected ArrayList InnerList { get { if (list == null) list = new ArrayList(); return list; } } protected IList List { get { return (IList)this; } } [System.Runtime.InteropServices.ComVisible(false)] public int Capacity { get { return InnerList.Capacity; } set { InnerList.Capacity = value; } } public int Count { get { return list == null ? 0 : list.Count; } } public void Clear() { OnClear(); InnerList.Clear(); OnClearComplete(); } public void RemoveAt(int index) { if (index < 0 || index >= Count) throw new ArgumentOutOfRangeException("index", Environment.GetResourceString("ArgumentOutOfRange_Index")); Contract.EndContractBlock(); Object temp = InnerList[index]; OnValidate(temp); OnRemove(index, temp); InnerList.RemoveAt(index); try { OnRemoveComplete(index, temp); } catch { InnerList.Insert(index, temp); throw; } } bool IList.IsReadOnly { get { return InnerList.IsReadOnly; } } bool IList.IsFixedSize { get { return InnerList.IsFixedSize; } } bool ICollection.IsSynchronized { get { return InnerList.IsSynchronized; } } Object ICollection.SyncRoot { get { return InnerList.SyncRoot; } } void ICollection.CopyTo(Array array, int index) { InnerList.CopyTo(array, index); } Object IList.this[int index] { get { if (index < 0 || index >= Count) throw new ArgumentOutOfRangeException("index", Environment.GetResourceString("ArgumentOutOfRange_Index")); Contract.EndContractBlock(); return InnerList[index]; } set { if (index < 0 || index >= Count) throw new ArgumentOutOfRangeException("index", Environment.GetResourceString("ArgumentOutOfRange_Index")); Contract.EndContractBlock(); OnValidate(value); Object temp = InnerList[index]; OnSet(index, temp, value); InnerList[index] = value; try { OnSetComplete(index, temp, value); } catch { InnerList[index] = temp; throw; } } } bool IList.Contains(Object value) { return InnerList.Contains(value); } int IList.Add(Object value) { OnValidate(value); OnInsert(InnerList.Count, value); int index = InnerList.Add(value); try { OnInsertComplete(index, value); } catch { InnerList.RemoveAt(index); throw; } return index; } void IList.Remove(Object value) { OnValidate(value); int index = InnerList.IndexOf(value); if (index < 0) throw new ArgumentException(Environment.GetResourceString("Arg_RemoveArgNotFound")); OnRemove(index, value); InnerList.RemoveAt(index); try{ OnRemoveComplete(index, value); } catch { InnerList.Insert(index, value); throw; } } int IList.IndexOf(Object value) { return InnerList.IndexOf(value); } void IList.Insert(int index, Object value) { if (index < 0 || index > Count) throw new ArgumentOutOfRangeException("index", Environment.GetResourceString("ArgumentOutOfRange_Index")); Contract.EndContractBlock(); OnValidate(value); OnInsert(index, value); InnerList.Insert(index, value); try { OnInsertComplete(index, value); } catch { InnerList.RemoveAt(index); throw; } } public IEnumerator GetEnumerator() { return InnerList.GetEnumerator(); } protected virtual void OnSet(int index, Object oldValue, Object newValue) { } protected virtual void OnInsert(int index, Object value) { } protected virtual void OnClear() { } protected virtual void OnRemove(int index, Object value) { } protected virtual void OnValidate(Object value) { if (value == null) throw new ArgumentNullException("value"); Contract.EndContractBlock(); } protected virtual void OnSetComplete(int index, Object oldValue, Object newValue) { } protected virtual void OnInsertComplete(int index, Object value) { } protected virtual void OnClearComplete() { } protected virtual void OnRemoveComplete(int index, Object value) { } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- RowToFieldTransformer.cs
- InternalControlCollection.cs
- NetworkInformationPermission.cs
- DependencyPropertyKind.cs
- CalendarDay.cs
- HttpConfigurationSystem.cs
- XmlTypeMapping.cs
- RandomNumberGenerator.cs
- TextInfo.cs
- DSASignatureDeformatter.cs
- TableStyle.cs
- KnownTypes.cs
- WindowsFont.cs
- HttpRuntimeSection.cs
- CompositeDataBoundControl.cs
- BatchWriter.cs
- FtpWebResponse.cs
- EntityDesignerUtils.cs
- Rules.cs
- Sequence.cs
- QueryOptionExpression.cs
- BezierSegment.cs
- DetailsViewDeleteEventArgs.cs
- EntityContainerAssociationSetEnd.cs
- DuplicateWaitObjectException.cs
- RelationshipSet.cs
- BaseAutoFormat.cs
- CodeCatchClause.cs
- MetadataWorkspace.cs
- SqlXmlStorage.cs
- VisualBrush.cs
- AddInProcess.cs
- PenContexts.cs
- ToolStripDesignerUtils.cs
- DataSourceXmlSerializationAttribute.cs
- EventMappingSettingsCollection.cs
- XmlUnspecifiedAttribute.cs
- CopyOnWriteList.cs
- SchemaLookupTable.cs
- DeflateEmulationStream.cs
- MulticastOption.cs
- SafeRegistryKey.cs
- SqlRowUpdatingEvent.cs
- SizeFConverter.cs
- PixelFormat.cs
- ACL.cs
- DoubleLinkList.cs
- BitmapCacheBrush.cs
- MemoryFailPoint.cs
- DataControlFieldTypeEditor.cs
- ServiceBehaviorElement.cs
- DataViewManager.cs
- ipaddressinformationcollection.cs
- AppLevelCompilationSectionCache.cs
- ReversePositionQuery.cs
- Menu.cs
- SerializableAttribute.cs
- IUnknownConstantAttribute.cs
- ConnectivityStatus.cs
- CompilationRelaxations.cs
- SqlXmlStorage.cs
- SubMenuStyleCollectionEditor.cs
- HandlerFactoryCache.cs
- DataGridViewCellCancelEventArgs.cs
- TreeNodeCollectionEditorDialog.cs
- GifBitmapEncoder.cs
- RowBinding.cs
- ExpressionBindingCollection.cs
- CodeCommentStatementCollection.cs
- DrawingDrawingContext.cs
- PolyBezierSegment.cs
- FrameworkElementFactory.cs
- TextOnlyOutput.cs
- ZoomingMessageFilter.cs
- LicFileLicenseProvider.cs
- IList.cs
- COM2ICategorizePropertiesHandler.cs
- DropShadowBitmapEffect.cs
- MetadataPropertyCollection.cs
- Deserializer.cs
- RawUIStateInputReport.cs
- ProcessThreadCollection.cs
- TypeConverterAttribute.cs
- ScrollItemProviderWrapper.cs
- FutureFactory.cs
- StreamMarshaler.cs
- BitmapEffectGeneralTransform.cs
- GcHandle.cs
- XmlAttributeOverrides.cs
- ObjectReaderCompiler.cs
- InputBinding.cs
- HandleCollector.cs
- QilStrConcatenator.cs
- RoutingChannelExtension.cs
- UpdateCommand.cs
- TokenCreationException.cs
- IWorkflowDebuggerService.cs
- WindowsFont.cs
- NoResizeSelectionBorderGlyph.cs
- SqlStream.cs