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
- ParserContext.cs
- BridgeDataReader.cs
- DataGridCell.cs
- LogFlushAsyncResult.cs
- DataStreams.cs
- SectionVisual.cs
- ConnectionConsumerAttribute.cs
- RemoteWebConfigurationHostStream.cs
- RegexTypeEditor.cs
- TranslateTransform3D.cs
- DataBindingExpressionBuilder.cs
- EntryIndex.cs
- ProgressBarHighlightConverter.cs
- PtsPage.cs
- DnsPermission.cs
- DataSetUtil.cs
- DesignerSerializerAttribute.cs
- DataGridState.cs
- Model3DGroup.cs
- FileDialogCustomPlace.cs
- DesignBindingConverter.cs
- NumericUpDownAcceleration.cs
- ExtractCollection.cs
- _SslSessionsCache.cs
- LayoutUtils.cs
- XslCompiledTransform.cs
- SafeEventLogWriteHandle.cs
- AdapterDictionary.cs
- Evaluator.cs
- MetadataArtifactLoaderResource.cs
- TcpChannelHelper.cs
- Lasso.cs
- ReflectEventDescriptor.cs
- DescendantOverDescendantQuery.cs
- AVElementHelper.cs
- ColorConverter.cs
- PropertyEmitter.cs
- StyleCollection.cs
- UriExt.cs
- AbstractSvcMapFileLoader.cs
- ProviderIncompatibleException.cs
- NetworkInformationPermission.cs
- SecurityTokenValidationException.cs
- SymDocumentType.cs
- DetailsViewInsertedEventArgs.cs
- PackageRelationshipSelector.cs
- DocumentEventArgs.cs
- ValidationEventArgs.cs
- SmiContextFactory.cs
- DBBindings.cs
- UserPersonalizationStateInfo.cs
- securitycriticaldataformultiplegetandset.cs
- ButtonChrome.cs
- ProfileGroupSettings.cs
- GregorianCalendar.cs
- ConfigXmlDocument.cs
- HttpCacheParams.cs
- ErrorHandler.cs
- XsltInput.cs
- WindowsGraphicsWrapper.cs
- SqlDataSourceTableQuery.cs
- ChannelRequirements.cs
- Parser.cs
- UnknownBitmapDecoder.cs
- SqlDataSourceConfigureSortForm.cs
- ThreadAbortException.cs
- Gdiplus.cs
- CustomAttributeBuilder.cs
- PersonalizationProvider.cs
- MetadataSerializer.cs
- LoadGrammarCompletedEventArgs.cs
- KeyBinding.cs
- EmptyElement.cs
- DesignerTransactionCloseEvent.cs
- DbLambda.cs
- LinkLabelLinkClickedEvent.cs
- RemotingServices.cs
- ConnectionConsumerAttribute.cs
- XmlAnyElementAttribute.cs
- DataGridViewIntLinkedList.cs
- ContextMenuService.cs
- RequestCachePolicy.cs
- TextBoxBase.cs
- SetterBase.cs
- ConfigurationElement.cs
- ValidationPropertyAttribute.cs
- XNodeValidator.cs
- ServicesUtilities.cs
- TrackingDataItem.cs
- GridViewColumnHeaderAutomationPeer.cs
- UInt32Converter.cs
- WebPartHelpVerb.cs
- DynamicDataResources.Designer.cs
- ClientFormsIdentity.cs
- BrushValueSerializer.cs
- MultiView.cs
- XmlDownloadManager.cs
- EntityCommand.cs
- DataServiceKeyAttribute.cs
- CodeAttributeArgumentCollection.cs