Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- StringAnimationUsingKeyFrames.cs
- COM2ComponentEditor.cs
- WpfXamlMember.cs
- MailDefinition.cs
- ItemsControl.cs
- SafeFileMapViewHandle.cs
- InternalBufferOverflowException.cs
- FileDialogCustomPlacesCollection.cs
- TimeStampChecker.cs
- UriSectionData.cs
- ListControl.cs
- SourceSwitch.cs
- PenCursorManager.cs
- SystemWebSectionGroup.cs
- Property.cs
- MemoryFailPoint.cs
- XmlSchemaInclude.cs
- ConfigViewGenerator.cs
- _AuthenticationState.cs
- GPPOINTF.cs
- PixelFormatConverter.cs
- LinqDataSourceContextEventArgs.cs
- COM2DataTypeToManagedDataTypeConverter.cs
- ColumnMapCopier.cs
- CodeTypeDelegate.cs
- AssociatedControlConverter.cs
- PolicyStatement.cs
- SingleObjectCollection.cs
- CacheRequest.cs
- IntSecurity.cs
- TrackingParameters.cs
- CardSpaceShim.cs
- DecoderReplacementFallback.cs
- ProfessionalColorTable.cs
- MaskInputRejectedEventArgs.cs
- KeyValuePair.cs
- ServiceOperation.cs
- ExtensionWindowResizeGrip.cs
- SimpleTypeResolver.cs
- metadatamappinghashervisitor.cs
- XmlElementAttribute.cs
- RequestCacheEntry.cs
- TableCell.cs
- SystemResourceHost.cs
- CaseStatement.cs
- TabControlEvent.cs
- Wizard.cs
- Int64Converter.cs
- RootBrowserWindowProxy.cs
- BackgroundWorker.cs
- BuilderInfo.cs
- DataObjectFieldAttribute.cs
- WebPartExportVerb.cs
- OleCmdHelper.cs
- StreamReader.cs
- AtomContentProperty.cs
- PowerStatus.cs
- CalculatedColumn.cs
- OAVariantLib.cs
- FormsAuthenticationEventArgs.cs
- ReadContentAsBinaryHelper.cs
- WebPartDisplayModeEventArgs.cs
- BoundPropertyEntry.cs
- OdbcPermission.cs
- PropertyToken.cs
- DataRecordInternal.cs
- DependencyPropertyConverter.cs
- WebException.cs
- HttpCachePolicyElement.cs
- EncodingNLS.cs
- MSHTMLHost.cs
- BindingContext.cs
- BindingManagerDataErrorEventArgs.cs
- WebPartTransformerAttribute.cs
- PersonalizablePropertyEntry.cs
- CollectionAdapters.cs
- SqlDataReader.cs
- UnionExpr.cs
- SByteConverter.cs
- EntryWrittenEventArgs.cs
- AuthenticationModuleElement.cs
- HtmlAnchor.cs
- OdbcConnection.cs
- MeasureItemEvent.cs
- MissingMethodException.cs
- ManipulationVelocities.cs
- WindowVisualStateTracker.cs
- TraceLog.cs
- DataSourceNameHandler.cs
- HtmlTableRow.cs
- DefaultProxySection.cs
- AnnotationAuthorChangedEventArgs.cs
- SelectionItemProviderWrapper.cs
- UnsafeMethods.cs
- WpfKnownMember.cs
- Encoding.cs
- ViewPort3D.cs
- Renderer.cs
- FunctionQuery.cs
- CommandConverter.cs