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
- ObjectSecurity.cs
- ViewPort3D.cs
- XmlConvert.cs
- WorkflowPageSetupDialog.cs
- SingleSelectRootGridEntry.cs
- HttpInputStream.cs
- PagedControl.cs
- CreateUserWizard.cs
- DiagnosticsConfigurationHandler.cs
- ConfigurationErrorsException.cs
- PersonalizationDictionary.cs
- OleDbException.cs
- ZipIOFileItemStream.cs
- HttpHandlerActionCollection.cs
- Dispatcher.cs
- RouteData.cs
- LookupNode.cs
- SrgsGrammarCompiler.cs
- SizeFConverter.cs
- ResourceLoader.cs
- TextElement.cs
- InvalidCastException.cs
- XsltContext.cs
- PointHitTestResult.cs
- PngBitmapDecoder.cs
- LineBreakRecord.cs
- WebSysDisplayNameAttribute.cs
- Identity.cs
- NamespaceInfo.cs
- NavigationProperty.cs
- ScrollData.cs
- CodeDefaultValueExpression.cs
- Listbox.cs
- KeyedHashAlgorithm.cs
- SqlRowUpdatingEvent.cs
- WebPartsPersonalization.cs
- NetworkStream.cs
- TextRangeBase.cs
- TextEncodedRawTextWriter.cs
- PlaceHolder.cs
- TypeInitializationException.cs
- FormsAuthenticationModule.cs
- BrushValueSerializer.cs
- TableParaClient.cs
- RtfToXamlReader.cs
- DefaultHttpHandler.cs
- RemoteEndpointMessageProperty.cs
- MetadataSerializer.cs
- FillBehavior.cs
- DivideByZeroException.cs
- LabelTarget.cs
- RightsManagementInformation.cs
- NullableDoubleAverageAggregationOperator.cs
- RuntimeArgumentHandle.cs
- RecordsAffectedEventArgs.cs
- StoryFragments.cs
- QueryAsyncResult.cs
- Executor.cs
- WebPartCloseVerb.cs
- DataGridCell.cs
- HttpResponse.cs
- ProfessionalColorTable.cs
- BitmapEffectRenderDataResource.cs
- SettingsPropertyValue.cs
- GeneralTransform3DCollection.cs
- XmlFormatExtensionPointAttribute.cs
- UnauthorizedAccessException.cs
- MarginsConverter.cs
- RuntimeResourceSet.cs
- TripleDES.cs
- HttpCacheVary.cs
- SmiXetterAccessMap.cs
- XPathNodeIterator.cs
- DesignerOptionService.cs
- ProgressBarHighlightConverter.cs
- XmlObjectSerializer.cs
- RoutingChannelExtension.cs
- MultiBinding.cs
- Pen.cs
- MasterPageParser.cs
- InputScopeNameConverter.cs
- FamilyCollection.cs
- ScrollableControlDesigner.cs
- XmlNamedNodeMap.cs
- TickBar.cs
- SafeBitVector32.cs
- BitStack.cs
- EntityType.cs
- VisualStyleInformation.cs
- EndPoint.cs
- DependencyPropertyHelper.cs
- CodeAttributeDeclarationCollection.cs
- BamlLocalizableResource.cs
- XmlSchemaSet.cs
- ClassicBorderDecorator.cs
- HScrollProperties.cs
- XmlNamespaceManager.cs
- TextServicesPropertyRanges.cs
- CallbackHandler.cs
- CodeObject.cs