Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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) { } } } // 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
- DataRowCollection.cs
- AssemblyName.cs
- UpdatePanelControlTrigger.cs
- OdbcConnectionString.cs
- PopupEventArgs.cs
- FreezableDefaultValueFactory.cs
- ApplicationFileParser.cs
- SqlServer2KCompatibilityAnnotation.cs
- Cursor.cs
- ProcessInfo.cs
- SystemException.cs
- ProfileSettingsCollection.cs
- CompilerCollection.cs
- ListParaClient.cs
- LocatorManager.cs
- TableSectionStyle.cs
- DocumentViewer.cs
- ConfigurationSectionGroupCollection.cs
- ConfigurationElementProperty.cs
- XPathEmptyIterator.cs
- assertwrapper.cs
- UnsafeNativeMethods.cs
- isolationinterop.cs
- DrawingVisual.cs
- ContentHostHelper.cs
- GenericTextProperties.cs
- XmlSchemas.cs
- XmlNodeChangedEventArgs.cs
- DesignSurfaceCollection.cs
- CryptoApi.cs
- MemberRelationshipService.cs
- CssTextWriter.cs
- _FtpControlStream.cs
- RMEnrollmentPage1.cs
- GacUtil.cs
- LicenseProviderAttribute.cs
- CodeTypeReference.cs
- ValueTypePropertyReference.cs
- NewArrayExpression.cs
- MethodCallConverter.cs
- CalendarDataBindingHandler.cs
- MatrixConverter.cs
- Int16.cs
- TextBoxAutomationPeer.cs
- MSG.cs
- EntityClassGenerator.cs
- CanExecuteRoutedEventArgs.cs
- MarkupExtensionSerializer.cs
- XmlSerializerVersionAttribute.cs
- RightNameExpirationInfoPair.cs
- DataGridAddNewRow.cs
- Glyph.cs
- Funcletizer.cs
- HttpModuleAction.cs
- Ops.cs
- SystemDiagnosticsSection.cs
- SerialStream.cs
- KeyConverter.cs
- XmlJsonReader.cs
- Component.cs
- DynamicPropertyReader.cs
- SqlAliasesReferenced.cs
- ResourceDisplayNameAttribute.cs
- DbConnectionPoolCounters.cs
- HtmlLiteralTextAdapter.cs
- DbConnectionStringBuilder.cs
- CodeAttributeDeclaration.cs
- ApplicationBuildProvider.cs
- ColorAnimationBase.cs
- DoubleKeyFrameCollection.cs
- HtmlTextArea.cs
- EditorZoneBase.cs
- ConnectionProviderAttribute.cs
- RelatedCurrencyManager.cs
- XmlQueryOutput.cs
- _NativeSSPI.cs
- validationstate.cs
- ArithmeticException.cs
- Quad.cs
- StylusTip.cs
- JpegBitmapEncoder.cs
- WebPartRestoreVerb.cs
- TransformedBitmap.cs
- HtmlFormWrapper.cs
- SiteMap.cs
- MeasurementDCInfo.cs
- OracleTimeSpan.cs
- SemanticResultKey.cs
- CollectionDataContractAttribute.cs
- ImageFormat.cs
- XmlLangPropertyAttribute.cs
- HitTestResult.cs
- XmlQueryContext.cs
- TextBoxAutomationPeer.cs
- ObjectDataSourceSelectingEventArgs.cs
- CodeTypeConstructor.cs
- Model3DGroup.cs
- EntityDataSourceDesigner.cs
- SectionRecord.cs
- ExpressionDumper.cs