Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / 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) { } } }
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- CssClassPropertyAttribute.cs
- Package.cs
- DeclarativeCatalogPart.cs
- OracleTimeSpan.cs
- _OverlappedAsyncResult.cs
- SqlDataSourceSelectingEventArgs.cs
- ArrayTypeMismatchException.cs
- CatalogZoneBase.cs
- XmlWriterSettings.cs
- MarshalByRefObject.cs
- keycontainerpermission.cs
- SymDocumentType.cs
- AuthenticateEventArgs.cs
- ListItemConverter.cs
- WebPartTransformerCollection.cs
- MimeReturn.cs
- SafeLocalMemHandle.cs
- StackSpiller.cs
- EdmRelationshipNavigationPropertyAttribute.cs
- InfoCardRSAPKCS1SignatureFormatter.cs
- Merger.cs
- CatalogZone.cs
- SplitContainerDesigner.cs
- HyperLinkStyle.cs
- DrawingContextWalker.cs
- XmlConvert.cs
- TripleDESCryptoServiceProvider.cs
- MaskPropertyEditor.cs
- EdmItemCollection.cs
- PrintDialogException.cs
- KeyedHashAlgorithm.cs
- DependencyPropertyAttribute.cs
- SafeThreadHandle.cs
- TraceLevelHelper.cs
- StylusPointProperties.cs
- BufferedReadStream.cs
- IgnoreFlushAndCloseStream.cs
- XslCompiledTransform.cs
- PointIndependentAnimationStorage.cs
- SqlTransaction.cs
- Utility.cs
- FormViewPagerRow.cs
- NonVisualControlAttribute.cs
- LinqDataSourceValidationException.cs
- ObjectDataSourceFilteringEventArgs.cs
- VirtualPathUtility.cs
- ByteConverter.cs
- CssStyleCollection.cs
- TableLayoutColumnStyleCollection.cs
- StateWorkerRequest.cs
- TypeDescriptionProviderAttribute.cs
- ConfigViewGenerator.cs
- ContextQuery.cs
- UserInitiatedNavigationPermission.cs
- XmlSchemaSet.cs
- CompilationSection.cs
- MergeFilterQuery.cs
- RenderingEventArgs.cs
- ActivityMarkupSerializationProvider.cs
- RijndaelManagedTransform.cs
- DeviceSpecificDesigner.cs
- RequestCacheValidator.cs
- StickyNote.cs
- DesignerActionKeyboardBehavior.cs
- StringArrayConverter.cs
- Viewport2DVisual3D.cs
- ToolStripDropDownButton.cs
- LocalFileSettingsProvider.cs
- PackWebRequest.cs
- ModelItemExtensions.cs
- DBDataPermission.cs
- Exception.cs
- PrintControllerWithStatusDialog.cs
- CalendarButton.cs
- NetPipeSection.cs
- categoryentry.cs
- ZipIOEndOfCentralDirectoryBlock.cs
- FontFamilyIdentifier.cs
- Misc.cs
- DynamicRenderer.cs
- SiteMapPathDesigner.cs
- CustomErrorsSection.cs
- DesignTimeTemplateParser.cs
- CriticalExceptions.cs
- CalendarTable.cs
- Journaling.cs
- StrokeNodeOperations2.cs
- Signature.cs
- RequestResizeEvent.cs
- CqlParserHelpers.cs
- CodeExporter.cs
- FontFamilyConverter.cs
- DataViewManagerListItemTypeDescriptor.cs
- PartDesigner.cs
- XmlSecureResolver.cs
- Focus.cs
- SizeLimitedCache.cs
- SvcFileManager.cs
- SqlNotificationEventArgs.cs
- SqlVisitor.cs