Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / 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
- XmlDownloadManager.cs
- HostedAspNetEnvironment.cs
- RequestQueryParser.cs
- XmlSchemaImporter.cs
- Variable.cs
- ContextStaticAttribute.cs
- CreatingCookieEventArgs.cs
- BuildDependencySet.cs
- ListViewGroupItemCollection.cs
- BorderSidesEditor.cs
- DataGridViewLinkColumn.cs
- ColumnWidthChangingEvent.cs
- SerializationTrace.cs
- DrawingContextWalker.cs
- MetaDataInfo.cs
- TemplateBuilder.cs
- ToolStripProfessionalLowResolutionRenderer.cs
- DataGridDefaultColumnWidthTypeConverter.cs
- SiteMap.cs
- WindowsStatic.cs
- SafeRegistryHandle.cs
- SchemaElementLookUpTableEnumerator.cs
- ClientScriptManagerWrapper.cs
- HtmlElementErrorEventArgs.cs
- TargetControlTypeCache.cs
- ScriptControl.cs
- DataObjectCopyingEventArgs.cs
- RetrieveVirtualItemEventArgs.cs
- CustomValidator.cs
- ApplicationProxyInternal.cs
- DefaultValueAttribute.cs
- XPathMultyIterator.cs
- ColorAnimationBase.cs
- ConfigurationLocationCollection.cs
- CriticalExceptions.cs
- InterleavedZipPartStream.cs
- ScaleTransform3D.cs
- RuntimeUtils.cs
- TextEditorContextMenu.cs
- ValuePattern.cs
- BrowserDefinition.cs
- XmlDomTextWriter.cs
- RadioButtonAutomationPeer.cs
- FormatConvertedBitmap.cs
- xamlnodes.cs
- GlyphsSerializer.cs
- _NestedSingleAsyncResult.cs
- AxDesigner.cs
- WindowsListViewItem.cs
- DataSourceXmlSerializer.cs
- ServerReliableChannelBinder.cs
- HttpModuleAction.cs
- PropertyRef.cs
- BaseCAMarshaler.cs
- PostBackTrigger.cs
- SqlRetyper.cs
- DataControlField.cs
- BatchWriter.cs
- SerialStream.cs
- SharedPersonalizationStateInfo.cs
- UIHelper.cs
- CngKeyCreationParameters.cs
- CssTextWriter.cs
- SimpleExpression.cs
- CorrelationExtension.cs
- XmlFileEditor.cs
- ShutDownListener.cs
- DataGridViewCellStyle.cs
- EmptyControlCollection.cs
- UrlAuthFailureHandler.cs
- DateTimeStorage.cs
- QilFactory.cs
- bindurihelper.cs
- InheritanceAttribute.cs
- SoapAttributes.cs
- CompModSwitches.cs
- Int32CollectionValueSerializer.cs
- Literal.cs
- TokenizerHelper.cs
- OutKeywords.cs
- ResourcePermissionBaseEntry.cs
- GridItemPatternIdentifiers.cs
- FieldNameLookup.cs
- StrongTypingException.cs
- StrokeNodeEnumerator.cs
- ControlEvent.cs
- SQLSingle.cs
- XPathNodeIterator.cs
- ParamArrayAttribute.cs
- QueryStringParameter.cs
- SafeRsaProviderHandle.cs
- PerformanceCounterPermissionAttribute.cs
- MetadataSource.cs
- OleDbError.cs
- XmlSchemaGroup.cs
- TemplatePropertyEntry.cs
- ToolboxComponentsCreatedEventArgs.cs
- ObjectItemCachedAssemblyLoader.cs
- TemplatePropertyEntry.cs
- ApplicationServicesHostFactory.cs