Code:
/ DotNET / DotNET / 8.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
- DiagnosticsConfiguration.cs
- CompositeActivityValidator.cs
- WorkflowMarkupSerializationManager.cs
- EventWaitHandle.cs
- WindowsPrincipal.cs
- CompilerResults.cs
- AsyncOperation.cs
- TemplateControlParser.cs
- CachingHintValidation.cs
- TrackingRecord.cs
- AttributeQuery.cs
- SwitchElementsCollection.cs
- StatusBarPanel.cs
- WebPartZoneCollection.cs
- DataRowComparer.cs
- SQLBoolean.cs
- DesignerSerializerAttribute.cs
- CodeIdentifiers.cs
- SQLByte.cs
- SettingsPropertyValue.cs
- ListenerTraceUtility.cs
- _ChunkParse.cs
- FontSizeConverter.cs
- XDeferredAxisSource.cs
- DocumentReferenceCollection.cs
- FilteredAttributeCollection.cs
- CreateBookmarkScope.cs
- StateMachineAction.cs
- Point.cs
- StoreAnnotationsMap.cs
- AmbientValueAttribute.cs
- WorkflowIdleBehavior.cs
- FrameworkElementFactoryMarkupObject.cs
- Int32Storage.cs
- RunWorkerCompletedEventArgs.cs
- RegexFCD.cs
- WebBrowserEvent.cs
- BindingMAnagerBase.cs
- CodeParameterDeclarationExpression.cs
- NodeInfo.cs
- EntityDataSourceEntitySetNameItem.cs
- XmlSchemaAttributeGroupRef.cs
- MediaContext.cs
- InitializingNewItemEventArgs.cs
- ZipPackage.cs
- WindowsNonControl.cs
- TempEnvironment.cs
- Condition.cs
- Menu.cs
- TextTreeDeleteContentUndoUnit.cs
- XPathAncestorIterator.cs
- XmlArrayItemAttribute.cs
- DSASignatureDeformatter.cs
- DataRecordObjectView.cs
- FirstMatchCodeGroup.cs
- ValidationSummary.cs
- ParserHooks.cs
- ExtenderHelpers.cs
- SafeUserTokenHandle.cs
- DrawItemEvent.cs
- WpfPayload.cs
- PerformanceCounterLib.cs
- RawKeyboardInputReport.cs
- SecurityCookieModeValidator.cs
- MetadataPropertyCollection.cs
- FileIOPermission.cs
- MsmqTransportSecurity.cs
- BaseDataList.cs
- DeclarativeConditionsCollection.cs
- MetadataStore.cs
- StylusPlugInCollection.cs
- CollectionChangeEventArgs.cs
- ContextBase.cs
- UniformGrid.cs
- ResourceKey.cs
- NameValueFileSectionHandler.cs
- HtmlInputFile.cs
- Serializer.cs
- HitTestWithGeometryDrawingContextWalker.cs
- XmlArrayItemAttribute.cs
- Configuration.cs
- RenderContext.cs
- CalloutQueueItem.cs
- AdornedElementPlaceholder.cs
- ScriptResourceDefinition.cs
- DataGridViewColumnCollection.cs
- controlskin.cs
- ObjectNavigationPropertyMapping.cs
- ReplacementText.cs
- clipboard.cs
- HtmlAnchor.cs
- XmlSchemaComplexContent.cs
- XmlCDATASection.cs
- CollectionConverter.cs
- NameTable.cs
- GenerateScriptTypeAttribute.cs
- ConfigurationValidatorBase.cs
- WindowsSpinner.cs
- exports.cs
- CodeTypeReferenceCollection.cs