Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / clr / src / BCL / System / Collections / DictionaryBase.cs / 1 / DictionaryBase.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== //------------------------------------------------------------------------------ //----------------------------------------------------------------------------- namespace System.Collections { using System; using System.Security.Permissions; // Useful base class for typed read/write collections where items derive from object [Serializable] [System.Runtime.InteropServices.ComVisible(true)] public abstract class DictionaryBase : IDictionary { Hashtable hashtable; protected Hashtable InnerHashtable { get { if (hashtable == null) hashtable = new Hashtable(); return hashtable; } } protected IDictionary Dictionary { get { return (IDictionary) this; } } public int Count { // to avoid newing inner list if no items are ever added get { return hashtable == null ? 0 : hashtable.Count; } } bool IDictionary.IsReadOnly { get { return InnerHashtable.IsReadOnly; } } bool IDictionary.IsFixedSize { get { return InnerHashtable.IsFixedSize; } } bool ICollection.IsSynchronized { get { return InnerHashtable.IsSynchronized; } } ICollection IDictionary.Keys { get { return InnerHashtable.Keys; } } Object ICollection.SyncRoot { get { return InnerHashtable.SyncRoot; } } ICollection IDictionary.Values { get { return InnerHashtable.Values; } } public void CopyTo(Array array, int index) { InnerHashtable.CopyTo(array, index); } object IDictionary.this[object key] { get { object currentValue = InnerHashtable[key]; OnGet(key, currentValue); return currentValue; } set { OnValidate(key, value); bool keyExists = true; Object temp = InnerHashtable[key]; if( temp == null) { keyExists = InnerHashtable.Contains(key); } OnSet(key, temp, value); InnerHashtable[key] = value; try { OnSetComplete(key, temp, value); } catch { if( keyExists) { InnerHashtable[key] = temp; } else { InnerHashtable.Remove(key); } throw; } } } bool IDictionary.Contains(object key) { return InnerHashtable.Contains(key); } void IDictionary.Add(object key, object value) { OnValidate(key, value); OnInsert(key, value); InnerHashtable.Add(key, value); try { OnInsertComplete(key, value); } catch { InnerHashtable.Remove(key); throw; } } public void Clear() { OnClear(); InnerHashtable.Clear(); OnClearComplete(); } void IDictionary.Remove(object key) { if(InnerHashtable.Contains(key)) { Object temp = InnerHashtable[key]; OnValidate(key, temp); OnRemove(key, temp); InnerHashtable.Remove(key); try { OnRemoveComplete(key, temp); } catch { InnerHashtable.Add(key, temp); throw; } } } public IDictionaryEnumerator GetEnumerator() { return InnerHashtable.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return InnerHashtable.GetEnumerator(); } protected virtual object OnGet(object key, object currentValue) { return currentValue; } protected virtual void OnSet(object key, object oldValue, object newValue) { } protected virtual void OnInsert(object key, object value) { } protected virtual void OnClear() { } protected virtual void OnRemove(object key, object value) { } protected virtual void OnValidate(object key, object value) { } protected virtual void OnSetComplete(object key, object oldValue, object newValue) { } protected virtual void OnInsertComplete(object key, object value) { } protected virtual void OnClearComplete() { } protected virtual void OnRemoveComplete(object key, object value) { } } }
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- FileLevelControlBuilderAttribute.cs
- Transform3DCollection.cs
- SoapAttributes.cs
- CatalogPartCollection.cs
- XmlSchemaSimpleTypeList.cs
- XmlnsCache.cs
- SecurityContext.cs
- SqlExpander.cs
- RawUIStateInputReport.cs
- EncodingTable.cs
- AppModelKnownContentFactory.cs
- MetadataItemEmitter.cs
- TrustManagerPromptUI.cs
- PartialCachingAttribute.cs
- AllMembershipCondition.cs
- HtmlInputFile.cs
- TextAnchor.cs
- ColumnMapTranslator.cs
- WebConfigManager.cs
- HttpWriter.cs
- MsmqIntegrationValidationBehavior.cs
- TransactionTable.cs
- CustomAttribute.cs
- ACL.cs
- GradientStopCollection.cs
- WebPartTransformer.cs
- AttributeUsageAttribute.cs
- WindowsGraphics.cs
- Baml2006ReaderFrame.cs
- OSFeature.cs
- AutoGeneratedFieldProperties.cs
- BitmapEffectvisualstate.cs
- LinearQuaternionKeyFrame.cs
- ButtonBase.cs
- PropertyValue.cs
- StreamWriter.cs
- InkCanvasInnerCanvas.cs
- DataSourceCache.cs
- WebPartChrome.cs
- TrackingConditionCollection.cs
- Vector.cs
- ExtendedPropertyInfo.cs
- UnlockInstanceAsyncResult.cs
- CollectionType.cs
- ListBoxDesigner.cs
- CommandField.cs
- PublishLicense.cs
- ViewgenContext.cs
- GlyphRunDrawing.cs
- PropertyGridDesigner.cs
- FontNamesConverter.cs
- SamlSecurityTokenAuthenticator.cs
- BinaryMethodMessage.cs
- WorkerRequest.cs
- XpsColorContext.cs
- ColorAnimationUsingKeyFrames.cs
- ConnectionManagementElement.cs
- TextBlock.cs
- FusionWrap.cs
- PreviewKeyDownEventArgs.cs
- Substitution.cs
- DuplicateContext.cs
- Attributes.cs
- SecurityCriticalDataForSet.cs
- StylusSystemGestureEventArgs.cs
- MSG.cs
- XmlSchemaSimpleContentExtension.cs
- ZoneIdentityPermission.cs
- FontCacheLogic.cs
- XhtmlCssHandler.cs
- DataGridViewCellStateChangedEventArgs.cs
- followingquery.cs
- ReflectionUtil.cs
- OperatorExpressions.cs
- ScriptBehaviorDescriptor.cs
- _ConnectOverlappedAsyncResult.cs
- SchemaElementLookUpTableEnumerator.cs
- DataIdProcessor.cs
- RequestResizeEvent.cs
- AppModelKnownContentFactory.cs
- TextDecorationCollection.cs
- RandomNumberGenerator.cs
- StretchValidation.cs
- StringStorage.cs
- BounceEase.cs
- WindowsFormsHostPropertyMap.cs
- CqlWriter.cs
- StringValueSerializer.cs
- ScheduleChanges.cs
- ApplicationActivator.cs
- PropertyDescriptorCollection.cs
- HtmlTableRowCollection.cs
- BCLDebug.cs
- RtType.cs
- Int16Storage.cs
- Util.cs
- Viewport2DVisual3D.cs
- MemberAssignmentAnalysis.cs
- XmlSerializerNamespaces.cs
- SchemaTableColumn.cs