Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / 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
- x509utils.cs
- SQLByteStorage.cs
- StatusBarItem.cs
- MobileControl.cs
- SiteMapDataSource.cs
- MetricEntry.cs
- ClassicBorderDecorator.cs
- BitStream.cs
- WebRequestModuleElement.cs
- RunInstallerAttribute.cs
- CachedBitmap.cs
- TreeView.cs
- StreamResourceInfo.cs
- QilStrConcat.cs
- Rect.cs
- SpeechSeg.cs
- AudienceUriMode.cs
- MissingManifestResourceException.cs
- ExtentJoinTreeNode.cs
- ProfilePropertySettings.cs
- Int16Storage.cs
- ProcessingInstructionAction.cs
- PkcsUtils.cs
- ExtensionDataObject.cs
- ValueTable.cs
- DocumentOrderQuery.cs
- EnumValidator.cs
- DataGridViewTopLeftHeaderCell.cs
- ErrorFormatter.cs
- SharedConnectionWorkflowTransactionService.cs
- XmlSerializerVersionAttribute.cs
- HttpClientChannel.cs
- ScrollContentPresenter.cs
- WebPartDeleteVerb.cs
- VirtualPathProvider.cs
- Run.cs
- TypedReference.cs
- DataBoundControlAdapter.cs
- ImageIndexConverter.cs
- PageThemeCodeDomTreeGenerator.cs
- ContentDisposition.cs
- RectangleConverter.cs
- FixedDocumentSequencePaginator.cs
- FormsAuthenticationModule.cs
- ListViewInsertEventArgs.cs
- TextContainer.cs
- SendingRequestEventArgs.cs
- WorkflowMarkupSerializationException.cs
- SignedInfo.cs
- MessageSecurityOverMsmqElement.cs
- DbConnectionPoolGroup.cs
- Token.cs
- SmtpFailedRecipientsException.cs
- AssemblyCache.cs
- _DisconnectOverlappedAsyncResult.cs
- MenuAdapter.cs
- WorkflowRuntimeServicesBehavior.cs
- Light.cs
- SiteMapHierarchicalDataSourceView.cs
- TextAction.cs
- Splitter.cs
- TablePatternIdentifiers.cs
- InvalidOleVariantTypeException.cs
- TextPattern.cs
- XmlCollation.cs
- AppDomainUnloadedException.cs
- RegexStringValidator.cs
- XmlSchemaCollection.cs
- ReferencedCollectionType.cs
- BypassElement.cs
- ProcessHostServerConfig.cs
- AsyncOperationManager.cs
- MsmqProcessProtocolHandler.cs
- Transform3DGroup.cs
- DefaultValueAttribute.cs
- AppSettingsReader.cs
- GridToolTip.cs
- PagesSection.cs
- ViewManager.cs
- GlyphManager.cs
- HebrewNumber.cs
- TextProviderWrapper.cs
- NegationPusher.cs
- DataGridViewColumnDesignTimeVisibleAttribute.cs
- TypeTypeConverter.cs
- WindowsAltTab.cs
- DataAdapter.cs
- HttpResponseInternalWrapper.cs
- WasAdminWrapper.cs
- BmpBitmapEncoder.cs
- HandlerBase.cs
- ActivityDesignerResources.cs
- DesignerOptionService.cs
- MediaSystem.cs
- OleDbPropertySetGuid.cs
- XamlInt32CollectionSerializer.cs
- LayoutEngine.cs
- BamlVersionHeader.cs
- GenericPrincipal.cs
- SplitContainer.cs