Code:
/ 4.0 / 4.0 / 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. // ==++== // // 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
- RegexStringValidatorAttribute.cs
- InternalConfigRoot.cs
- SaveFileDialog.cs
- RegistryKey.cs
- NameValueConfigurationCollection.cs
- X509IssuerSerialKeyIdentifierClause.cs
- ComContractElementCollection.cs
- HtmlEncodedRawTextWriter.cs
- SqlEnums.cs
- Transform3DGroup.cs
- Utils.cs
- PasswordTextNavigator.cs
- GeneralTransformCollection.cs
- InstallerTypeAttribute.cs
- ControlPropertyNameConverter.cs
- NameValueConfigurationElement.cs
- ClipboardProcessor.cs
- ComponentEditorPage.cs
- ListParagraph.cs
- DataSet.cs
- IsolatedStorageFilePermission.cs
- LayoutTableCell.cs
- TreeViewImageIndexConverter.cs
- RowToFieldTransformer.cs
- Win32KeyboardDevice.cs
- RecordConverter.cs
- AssemblyCacheEntry.cs
- RoleManagerModule.cs
- FormViewDeletedEventArgs.cs
- XmlSiteMapProvider.cs
- InfoCardRSAPKCS1SignatureFormatter.cs
- ReferenceConverter.cs
- TextCollapsingProperties.cs
- ArgumentsParser.cs
- BitmapScalingModeValidation.cs
- ClientSettingsSection.cs
- SqlCacheDependency.cs
- Ops.cs
- Rect3DConverter.cs
- EFDataModelProvider.cs
- ImmutableCommunicationTimeouts.cs
- HttpHandlerAction.cs
- CounterSetInstance.cs
- CodeExpressionStatement.cs
- GregorianCalendar.cs
- HiddenField.cs
- DisplayNameAttribute.cs
- Italic.cs
- NodeCounter.cs
- DoubleAnimationUsingKeyFrames.cs
- SetterBaseCollection.cs
- wgx_exports.cs
- IndexExpression.cs
- Triplet.cs
- SecurityUtils.cs
- FilteredDataSetHelper.cs
- CodeExpressionCollection.cs
- CurrentChangingEventManager.cs
- FigureParaClient.cs
- BigInt.cs
- ColorConvertedBitmap.cs
- Util.cs
- Paragraph.cs
- TripleDESCryptoServiceProvider.cs
- InvalidPropValue.cs
- ParamArrayAttribute.cs
- ToolStripContentPanel.cs
- MULTI_QI.cs
- PropertyIdentifier.cs
- HttpCapabilitiesBase.cs
- ToolboxItem.cs
- ListItemViewControl.cs
- BaseUriHelper.cs
- TypeListConverter.cs
- ApplicationActivator.cs
- RootProfilePropertySettingsCollection.cs
- IntPtr.cs
- ColorDialog.cs
- ZoneIdentityPermission.cs
- HtmlInputFile.cs
- TextServicesLoader.cs
- XsdBuilder.cs
- ColorConverter.cs
- GridSplitterAutomationPeer.cs
- HtmlPhoneCallAdapter.cs
- _CommandStream.cs
- HttpCacheVaryByContentEncodings.cs
- SafeViewOfFileHandle.cs
- ClaimTypeElementCollection.cs
- List.cs
- ProgressiveCrcCalculatingStream.cs
- DiffuseMaterial.cs
- BigInt.cs
- RequestCache.cs
- CommentGlyph.cs
- MailDefinition.cs
- ObjectDataSourceSelectingEventArgs.cs
- DataTableExtensions.cs
- SqlCacheDependency.cs
- WebPartDisplayModeCollection.cs