Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / clr / src / BCL / System / Collections / CollectionBase.cs / 1 / CollectionBase.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== //------------------------------------------------------------------------------ //----------------------------------------------------------------------------- namespace System.Collections { using System; // 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 >= InnerList.Count) throw new ArgumentOutOfRangeException("index", Environment.GetResourceString("ArgumentOutOfRange_Index")); 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 >= InnerList.Count) throw new ArgumentOutOfRangeException("index", Environment.GetResourceString("ArgumentOutOfRange_Index")); return InnerList[index]; } set { if (index < 0 || index >= InnerList.Count) throw new ArgumentOutOfRangeException("index", Environment.GetResourceString("ArgumentOutOfRange_Index")); 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 > InnerList.Count) throw new ArgumentOutOfRangeException("index", Environment.GetResourceString("ArgumentOutOfRange_Index")); 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"); } 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) { } } }
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- AmbiguousMatchException.cs
- DataBindingExpressionBuilder.cs
- HtmlWindow.cs
- PartialList.cs
- TransformConverter.cs
- DescendantOverDescendantQuery.cs
- CngKey.cs
- BigInt.cs
- IteratorDescriptor.cs
- StringFunctions.cs
- AddingNewEventArgs.cs
- ObjectStateManagerMetadata.cs
- ArgumentOutOfRangeException.cs
- activationcontext.cs
- KeyboardDevice.cs
- DataGridViewSelectedCellsAccessibleObject.cs
- UserNameSecurityTokenParameters.cs
- BamlVersionHeader.cs
- DataGridItemEventArgs.cs
- StrokeNode.cs
- OdbcException.cs
- ExtensionFile.cs
- DirectionalLight.cs
- CellQuery.cs
- dataobject.cs
- GridPatternIdentifiers.cs
- XamlUtilities.cs
- SqlFileStream.cs
- ConfigXmlCDataSection.cs
- COMException.cs
- Schema.cs
- TableProvider.cs
- SystemTcpStatistics.cs
- SmiMetaDataProperty.cs
- BookmarkUndoUnit.cs
- ISFClipboardData.cs
- WindowsStreamSecurityUpgradeProvider.cs
- TerminatorSinks.cs
- InitializationEventAttribute.cs
- TemplateKey.cs
- MatrixAnimationUsingKeyFrames.cs
- FormViewInsertEventArgs.cs
- MenuAdapter.cs
- ExpressionEditorSheet.cs
- AuthenticationService.cs
- OdbcEnvironment.cs
- SamlSecurityToken.cs
- EventToken.cs
- URLAttribute.cs
- Scene3D.cs
- NativeMethods.cs
- SmiEventStream.cs
- DataSetUtil.cs
- RelationshipFixer.cs
- OperationCanceledException.cs
- ApplicationSettingsBase.cs
- FunctionQuery.cs
- BamlRecordHelper.cs
- EntryPointNotFoundException.cs
- CodeExporter.cs
- Pkcs9Attribute.cs
- ValidationHelper.cs
- Point3DCollection.cs
- HttpAsyncResult.cs
- TextSegment.cs
- SafeFindHandle.cs
- BuildManager.cs
- XmlAttributeOverrides.cs
- FastEncoderWindow.cs
- UrlAuthFailedErrorFormatter.cs
- MobileControlDesigner.cs
- ListItemCollection.cs
- ChangePassword.cs
- AdornerHitTestResult.cs
- FileUpload.cs
- ValidationSummary.cs
- ProfileGroupSettingsCollection.cs
- DataGridViewColumnDividerDoubleClickEventArgs.cs
- AddInIpcChannel.cs
- RequiredAttributeAttribute.cs
- IHttpResponseInternal.cs
- SortExpressionBuilder.cs
- StylusPointProperties.cs
- KnownBoxes.cs
- ThemeableAttribute.cs
- RequestQueryParser.cs
- KerberosReceiverSecurityToken.cs
- RenderData.cs
- FilteredXmlReader.cs
- PropertyBuilder.cs
- SafeNativeMethods.cs
- ContentWrapperAttribute.cs
- COM2Properties.cs
- TextRangeAdaptor.cs
- GroupQuery.cs
- XmlAttributeAttribute.cs
- ToolStripDropDownMenu.cs
- MessageDesigner.cs
- FixedSchema.cs
- AdRotator.cs