Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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
- Converter.cs
- DoubleCollectionValueSerializer.cs
- HwndAppCommandInputProvider.cs
- DataRecordObjectView.cs
- InfoCardPolicy.cs
- InstancePersistenceException.cs
- Point4DValueSerializer.cs
- LogLogRecordHeader.cs
- DataGridViewCheckBoxColumn.cs
- SafeThreadHandle.cs
- DNS.cs
- DocumentViewerAutomationPeer.cs
- Point.cs
- Attributes.cs
- Operand.cs
- PropertyGridCommands.cs
- DataControlButton.cs
- InputLanguageCollection.cs
- Empty.cs
- ColumnBinding.cs
- RowCache.cs
- SoapProtocolImporter.cs
- LexicalChunk.cs
- ClosureBinding.cs
- CompiledELinqQueryState.cs
- Bits.cs
- TableDetailsRow.cs
- KnownTypesProvider.cs
- LambdaReference.cs
- SiblingIterators.cs
- odbcmetadatacolumnnames.cs
- DecimalConverter.cs
- coordinatorfactory.cs
- NameValueSectionHandler.cs
- baseaxisquery.cs
- UniqueIdentifierService.cs
- SuppressMergeCheckAttribute.cs
- TableDetailsCollection.cs
- SymDocumentType.cs
- Misc.cs
- MetadataUtil.cs
- CommandTreeTypeHelper.cs
- ItemMap.cs
- AbstractSvcMapFileLoader.cs
- WebServiceHandler.cs
- OAVariantLib.cs
- IIS7UserPrincipal.cs
- AnchoredBlock.cs
- PartialArray.cs
- CookieProtection.cs
- TransformerInfoCollection.cs
- InputMethodStateTypeInfo.cs
- XPathParser.cs
- ResizeGrip.cs
- relpropertyhelper.cs
- AssemblyAttributes.cs
- StringValidator.cs
- TextServicesManager.cs
- IsolationInterop.cs
- ValuePattern.cs
- DataTable.cs
- DataGridSortCommandEventArgs.cs
- MdiWindowListItemConverter.cs
- MediaSystem.cs
- DirectionalLight.cs
- InertiaRotationBehavior.cs
- TextSelection.cs
- UpdateException.cs
- SkipStoryboardToFill.cs
- PropagatorResult.cs
- TextParaLineResult.cs
- IPipelineRuntime.cs
- Speller.cs
- DrawListViewSubItemEventArgs.cs
- RemoteWebConfigurationHost.cs
- CompositionAdorner.cs
- FormatException.cs
- ExpressionBuilderCollection.cs
- HMACSHA384.cs
- NumericUpDown.cs
- PathStreamGeometryContext.cs
- SmiGettersStream.cs
- GenericArgumentsUpdater.cs
- TextWriter.cs
- VariantWrapper.cs
- CustomAttributeFormatException.cs
- DeclarativeCatalogPart.cs
- CdpEqualityComparer.cs
- ServiceSecurityAuditBehavior.cs
- BrowserInteropHelper.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- BindingExpression.cs
- EdmToObjectNamespaceMap.cs
- BrushMappingModeValidation.cs
- coordinatorfactory.cs
- Transform.cs
- ContextStack.cs
- PropertyFilterAttribute.cs
- _CacheStreams.cs
- CodeDelegateCreateExpression.cs