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
- Dispatcher.cs
- TextEditorTables.cs
- AutoResizedEvent.cs
- FunctionQuery.cs
- DrawListViewSubItemEventArgs.cs
- SHA512Managed.cs
- TopClause.cs
- XmlTextAttribute.cs
- IsolatedStorage.cs
- WebBaseEventKeyComparer.cs
- ReadWriteObjectLock.cs
- DocumentViewerHelper.cs
- SQLGuidStorage.cs
- LightweightCodeGenerator.cs
- FrameworkName.cs
- UserUseLicenseDictionaryLoader.cs
- GlyphingCache.cs
- SelectionPatternIdentifiers.cs
- MapPathBasedVirtualPathProvider.cs
- WindowsStatic.cs
- NestPullup.cs
- DataGridViewRowStateChangedEventArgs.cs
- ProfileParameter.cs
- ComponentSerializationService.cs
- AsyncStreamReader.cs
- InputLanguageEventArgs.cs
- StateMachineWorkflow.cs
- XmlDataCollection.cs
- DataObjectFieldAttribute.cs
- LeafCellTreeNode.cs
- DoubleLink.cs
- ReflectionUtil.cs
- XamlPoint3DCollectionSerializer.cs
- RC2.cs
- MarginsConverter.cs
- IPAddress.cs
- CacheChildrenQuery.cs
- Translator.cs
- IntellisenseTextBox.designer.cs
- DataGridViewColumnConverter.cs
- NamedPipeTransportBindingElement.cs
- ConnectionsZone.cs
- SmiEventSink_Default.cs
- TextDecorationCollectionConverter.cs
- TableAutomationPeer.cs
- ObjectContextServiceProvider.cs
- ConsoleEntryPoint.cs
- ContextMenuStripActionList.cs
- MarkupProperty.cs
- CatalogZone.cs
- SoapSchemaImporter.cs
- FileDialogPermission.cs
- RotationValidation.cs
- TextBox.cs
- MeasurementDCInfo.cs
- LicenseException.cs
- SystemColors.cs
- ClrPerspective.cs
- QueryStringParameter.cs
- XmlNavigatorStack.cs
- HttpListenerRequest.cs
- ComponentEditorForm.cs
- TileBrush.cs
- ConnectionStringEditor.cs
- SelectedDatesCollection.cs
- Contracts.cs
- CoreSwitches.cs
- ServiceDescriptionContext.cs
- InvalidCastException.cs
- MatrixKeyFrameCollection.cs
- SolidColorBrush.cs
- DataServiceContext.cs
- SqlConnectionHelper.cs
- DivideByZeroException.cs
- HwndHostAutomationPeer.cs
- TabItemWrapperAutomationPeer.cs
- RawMouseInputReport.cs
- HttpWriter.cs
- Atom10FormatterFactory.cs
- MsmqMessageProperty.cs
- DataGridViewColumnDesignTimeVisibleAttribute.cs
- NativeWrapper.cs
- NetPeerTcpBindingElement.cs
- XPathDocument.cs
- XmlDocumentSchema.cs
- FindCompletedEventArgs.cs
- CngProvider.cs
- HashCoreRequest.cs
- FamilyTypefaceCollection.cs
- ResourceReferenceExpressionConverter.cs
- ResourceSet.cs
- SQlBooleanStorage.cs
- ToolStripItemEventArgs.cs
- SchemaElementLookUpTable.cs
- SystemIPGlobalProperties.cs
- StyleCollectionEditor.cs
- WindowsStatusBar.cs
- HiddenFieldPageStatePersister.cs
- ObjectNotFoundException.cs
- ConsoleTraceListener.cs