Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / 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) { } } } // 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.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) { } } } // 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
- SizeChangedEventArgs.cs
- DiscoveryClientBindingElement.cs
- RadioButton.cs
- HttpCookie.cs
- SectionXmlInfo.cs
- EasingFunctionBase.cs
- BooleanStorage.cs
- ElementNotAvailableException.cs
- TextTreeRootNode.cs
- TextContainerHelper.cs
- OutputScopeManager.cs
- DefaultHttpHandler.cs
- OleDbInfoMessageEvent.cs
- AssemblyGen.cs
- UpdateProgress.cs
- TransactionTraceIdentifier.cs
- Sql8ConformanceChecker.cs
- EncoderFallback.cs
- BasicKeyConstraint.cs
- ISAPIApplicationHost.cs
- EnumDataContract.cs
- RoutedCommand.cs
- WebBrowserHelper.cs
- SqlUDTStorage.cs
- X509SubjectKeyIdentifierClause.cs
- TextEffect.cs
- LocatorPartList.cs
- WebPartDisplayModeCancelEventArgs.cs
- RoleBoolean.cs
- RunWorkerCompletedEventArgs.cs
- ContentPresenter.cs
- Enum.cs
- CollectionViewSource.cs
- TypeForwardedToAttribute.cs
- SqlDependencyUtils.cs
- EdmValidator.cs
- MouseOverProperty.cs
- SqlCacheDependencyDatabase.cs
- OneToOneMappingSerializer.cs
- PackageStore.cs
- EventLogInternal.cs
- TemplateBaseAction.cs
- ControlDesigner.cs
- ToolBarButton.cs
- ViewStateException.cs
- unsafeIndexingFilterStream.cs
- CommandPlan.cs
- Size3DValueSerializer.cs
- MetabaseServerConfig.cs
- HtmlAnchor.cs
- UserMapPath.cs
- DataGridTextBox.cs
- ContainerControl.cs
- StringAnimationBase.cs
- Material.cs
- Localizer.cs
- UserControlBuildProvider.cs
- embossbitmapeffect.cs
- ClientBuildManagerCallback.cs
- ObjectListSelectEventArgs.cs
- GlyphingCache.cs
- ScanQueryOperator.cs
- ProjectionNode.cs
- DoubleCollectionValueSerializer.cs
- PointLight.cs
- TreeView.cs
- BitmapEffectDrawingContent.cs
- FontStretchConverter.cs
- ControlValuePropertyAttribute.cs
- DefaultMemberAttribute.cs
- RijndaelManagedTransform.cs
- Matrix.cs
- DataServiceHostFactory.cs
- UnionExpr.cs
- GAC.cs
- FacetEnabledSchemaElement.cs
- ComboBoxItem.cs
- DataGridDefaultColumnWidthTypeConverter.cs
- ThreadSafeList.cs
- CreateUserWizardStep.cs
- InvalidOleVariantTypeException.cs
- RectValueSerializer.cs
- StatusBarPanelClickEvent.cs
- PropertyInfoSet.cs
- CommandArguments.cs
- BigInt.cs
- SQLMoneyStorage.cs
- WindowsTokenRoleProvider.cs
- ZipFileInfoCollection.cs
- PreviewKeyDownEventArgs.cs
- ImmutableDispatchRuntime.cs
- PackageRelationshipSelector.cs
- Graphics.cs
- IdentityModelStringsVersion1.cs
- ContextQuery.cs
- AttributeTable.cs
- GridViewRowCollection.cs
- EdmItemError.cs
- TargetControlTypeCache.cs
- BaseComponentEditor.cs