Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / clr / src / BCL / System / Collections / DictionaryBase.cs / 1305376 / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ScriptControl.cs
- SwitchLevelAttribute.cs
- ObjectSecurity.cs
- DisposableCollectionWrapper.cs
- ParserExtension.cs
- WebSysDisplayNameAttribute.cs
- DataObjectAttribute.cs
- PeerName.cs
- FtpCachePolicyElement.cs
- PenLineJoinValidation.cs
- GradientBrush.cs
- PrintPreviewGraphics.cs
- FormViewRow.cs
- EUCJPEncoding.cs
- InvokePatternIdentifiers.cs
- CodeAttributeArgument.cs
- CodeIndexerExpression.cs
- DataGridViewRowCancelEventArgs.cs
- ValidatorCompatibilityHelper.cs
- StreamUpgradeInitiator.cs
- SqlDataSourceSelectingEventArgs.cs
- DiffuseMaterial.cs
- StateBag.cs
- TextBoxView.cs
- SchemaCollectionCompiler.cs
- PersonalizationDictionary.cs
- OleDbWrapper.cs
- UnmanagedMemoryStream.cs
- PathSegment.cs
- AsyncOperationManager.cs
- AutoResizedEvent.cs
- AsyncResult.cs
- Imaging.cs
- PermissionSetTriple.cs
- ProgressBarBrushConverter.cs
- RectAnimationBase.cs
- MultiPropertyDescriptorGridEntry.cs
- ConfigurationValue.cs
- CustomPopupPlacement.cs
- CodeFieldReferenceExpression.cs
- PrincipalPermission.cs
- FtpRequestCacheValidator.cs
- UseAttributeSetsAction.cs
- DataGridColumnHeadersPresenterAutomationPeer.cs
- DataContractJsonSerializer.cs
- RayHitTestParameters.cs
- WorkflowInstanceExtensionCollection.cs
- ConfigurationStrings.cs
- QilScopedVisitor.cs
- TimeEnumHelper.cs
- TextEffect.cs
- BaseHashHelper.cs
- objectresult_tresulttype.cs
- UpdateCommand.cs
- SpeechDetectedEventArgs.cs
- MenuCommands.cs
- CngAlgorithmGroup.cs
- WinEventTracker.cs
- TableItemProviderWrapper.cs
- Container.cs
- VisualStyleElement.cs
- HttpChannelHelpers.cs
- GraphicsPathIterator.cs
- SingleStorage.cs
- ToolTipAutomationPeer.cs
- MethodImplAttribute.cs
- GridViewEditEventArgs.cs
- PrivilegedConfigurationManager.cs
- RoleManagerEventArgs.cs
- MarshalByValueComponent.cs
- HttpModuleCollection.cs
- WebPartDisplayMode.cs
- StorageMappingItemCollection.cs
- Solver.cs
- CodeIterationStatement.cs
- AttachedProperty.cs
- _ReceiveMessageOverlappedAsyncResult.cs
- XPathNodeList.cs
- dataSvcMapFileLoader.cs
- ProtocolsConfigurationEntry.cs
- ControlAdapter.cs
- Slider.cs
- OdbcInfoMessageEvent.cs
- JavaScriptString.cs
- SqlDependencyUtils.cs
- ObjectContext.cs
- QueryGeneratorBase.cs
- StandardOleMarshalObject.cs
- QueryOperator.cs
- AuthStoreRoleProvider.cs
- SemanticResolver.cs
- WindowInteropHelper.cs
- BaseTemplateBuildProvider.cs
- InvalidComObjectException.cs
- ImageKeyConverter.cs
- WebPartConnectionsDisconnectVerb.cs
- UrlUtility.cs
- DelayedRegex.cs
- ResourceDisplayNameAttribute.cs
- TemplateComponentConnector.cs