Code:
/ DotNET / DotNET / 8.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
- BitArray.cs
- DSACryptoServiceProvider.cs
- BitVector32.cs
- XPathExpr.cs
- BaseDataBoundControlDesigner.cs
- VersionConverter.cs
- UpDownEvent.cs
- UIElement.cs
- LinkButton.cs
- QilGeneratorEnv.cs
- PartialCachingControl.cs
- XhtmlBasicValidationSummaryAdapter.cs
- safelinkcollection.cs
- GeneratedCodeAttribute.cs
- UIPermission.cs
- DomNameTable.cs
- SoapFault.cs
- TreeWalker.cs
- SQLString.cs
- InheritablePropertyChangeInfo.cs
- ListDictionaryInternal.cs
- BamlBinaryReader.cs
- SHA384.cs
- SqlLiftWhereClauses.cs
- EditorBrowsableAttribute.cs
- RunInstallerAttribute.cs
- securitycriticaldataClass.cs
- PlatformNotSupportedException.cs
- PassportAuthenticationModule.cs
- TypeSystem.cs
- DoubleLinkList.cs
- ArgumentDesigner.xaml.cs
- DataGridViewRowEventArgs.cs
- EntityDesignerUtils.cs
- TreeNodeCollection.cs
- Geometry3D.cs
- TrustManagerPromptUI.cs
- ImageKeyConverter.cs
- DownloadProgressEventArgs.cs
- Codec.cs
- ToolboxItemFilterAttribute.cs
- ExchangeUtilities.cs
- DocumentsTrace.cs
- ThreadExceptionDialog.cs
- ProxyAttribute.cs
- Predicate.cs
- GrammarBuilder.cs
- Partitioner.cs
- HwndSubclass.cs
- RoleExceptions.cs
- CapabilitiesUse.cs
- input.cs
- ActivityBuilderHelper.cs
- SettingsProperty.cs
- SecurityDocument.cs
- PropertyFilterAttribute.cs
- FastPropertyAccessor.cs
- InputLanguage.cs
- Label.cs
- WsdlInspector.cs
- CodeChecksumPragma.cs
- AttributeCollection.cs
- InlineUIContainer.cs
- LockCookie.cs
- RotateTransform.cs
- SQLDateTimeStorage.cs
- XPathParser.cs
- hresults.cs
- HttpCapabilitiesSectionHandler.cs
- fixedPageContentExtractor.cs
- UriTemplateEquivalenceComparer.cs
- XmlAnyElementAttributes.cs
- PropertyReference.cs
- _LazyAsyncResult.cs
- StrongNamePublicKeyBlob.cs
- MDIWindowDialog.cs
- FastPropertyAccessor.cs
- QueryCacheKey.cs
- InvalidEnumArgumentException.cs
- PartManifestEntry.cs
- ResourceExpressionBuilder.cs
- RSAOAEPKeyExchangeFormatter.cs
- SemanticResultValue.cs
- EncoderFallback.cs
- SqlStatistics.cs
- ToolZone.cs
- ArglessEventHandlerProxy.cs
- TextBox.cs
- DataTemplateSelector.cs
- Pair.cs
- Viewport3DVisual.cs
- EnvelopedPkcs7.cs
- PageThemeBuildProvider.cs
- HtmlInputSubmit.cs
- ThreadAbortException.cs
- SoapObjectReader.cs
- OraclePermission.cs
- TextServicesContext.cs
- JobDuplex.cs
- DispatcherExceptionFilterEventArgs.cs