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
- SafeArchiveContext.cs
- ExceptionHandler.cs
- DataGridViewLinkColumn.cs
- TraceUtility.cs
- TextSelection.cs
- BitmapEffectDrawingContextWalker.cs
- FrameworkTextComposition.cs
- SharedRuntimeState.cs
- MenuEventArgs.cs
- PermissionSetEnumerator.cs
- SingleAnimation.cs
- AccessViolationException.cs
- TreeView.cs
- Win32.cs
- DesignerWidgets.cs
- DefaultShape.cs
- DataGridClipboardCellContent.cs
- MetaModel.cs
- UIElement3D.cs
- brushes.cs
- ListViewGroupItemCollection.cs
- WhitespaceRuleReader.cs
- EventlogProvider.cs
- CodeChecksumPragma.cs
- SafeRightsManagementEnvironmentHandle.cs
- SqlNodeAnnotations.cs
- ContextMenu.cs
- Decimal.cs
- DbProviderConfigurationHandler.cs
- Keywords.cs
- SwitchElementsCollection.cs
- PreviewKeyDownEventArgs.cs
- DetailsViewRow.cs
- Missing.cs
- WindowsFormsHelpers.cs
- RegexCharClass.cs
- GenericIdentity.cs
- CounterCreationDataCollection.cs
- ProcessModelInfo.cs
- Attributes.cs
- ObjectAnimationBase.cs
- EntityDataSourceConfigureObjectContext.cs
- AuthenticateEventArgs.cs
- MappingMetadataHelper.cs
- JoinTreeSlot.cs
- AlphabeticalEnumConverter.cs
- SystemIcons.cs
- PingReply.cs
- ChannelServices.cs
- UrlUtility.cs
- InvokeProviderWrapper.cs
- PasswordDeriveBytes.cs
- StylusPointPropertyInfoDefaults.cs
- Frame.cs
- LabelEditEvent.cs
- CatalogPart.cs
- DataObjectMethodAttribute.cs
- SBCSCodePageEncoding.cs
- Rijndael.cs
- Error.cs
- XmlSequenceWriter.cs
- TreeIterators.cs
- BrowserCapabilitiesCompiler.cs
- Encoder.cs
- DataSourceControl.cs
- TogglePatternIdentifiers.cs
- CriticalFinalizerObject.cs
- LocalValueEnumerator.cs
- DataBinding.cs
- SQLMembershipProvider.cs
- Bold.cs
- MatchingStyle.cs
- RouteParser.cs
- ValidatingReaderNodeData.cs
- HwndHostAutomationPeer.cs
- Missing.cs
- ConfigurationStrings.cs
- TabletDevice.cs
- XmlChoiceIdentifierAttribute.cs
- DecoderBestFitFallback.cs
- PublisherMembershipCondition.cs
- ApplicationException.cs
- listitem.cs
- TranslateTransform3D.cs
- OleDbRowUpdatedEvent.cs
- LassoSelectionBehavior.cs
- CodeNamespaceImportCollection.cs
- RoleManagerModule.cs
- RegexRunner.cs
- ChannelSinkStacks.cs
- ScriptResourceAttribute.cs
- WebPartVerbsEventArgs.cs
- Point3DAnimation.cs
- SubclassTypeValidatorAttribute.cs
- MsmqIntegrationBinding.cs
- XmlTextEncoder.cs
- HandlerFactoryCache.cs
- SafeNativeMethods.cs
- EventManager.cs
- ByteConverter.cs