Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / 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
- ImageEditor.cs
- MetadataFile.cs
- httpstaticobjectscollection.cs
- RegexCompiler.cs
- GeometryModel3D.cs
- TransportBindingElementImporter.cs
- Operand.cs
- X500Name.cs
- EmbossBitmapEffect.cs
- LazyTextWriterCreator.cs
- UriWriter.cs
- wmiprovider.cs
- SourceFileBuildProvider.cs
- IPPacketInformation.cs
- EventPropertyMap.cs
- ResourceDictionary.cs
- EventSourceCreationData.cs
- SatelliteContractVersionAttribute.cs
- ElementProxy.cs
- SafeNativeMemoryHandle.cs
- EpmSyndicationContentSerializer.cs
- WebPartAddingEventArgs.cs
- StateWorkerRequest.cs
- XmlReflectionImporter.cs
- EntitySqlException.cs
- StreamGeometry.cs
- AuthenticationModuleElementCollection.cs
- RubberbandSelector.cs
- HttpWriter.cs
- DatasetMethodGenerator.cs
- Transform3DGroup.cs
- Dynamic.cs
- precedingquery.cs
- metadatamappinghashervisitor.hashsourcebuilder.cs
- SHA256Managed.cs
- TypeDescriptionProviderAttribute.cs
- DataGridItemCollection.cs
- FieldToken.cs
- Parser.cs
- MasterPageParser.cs
- ADMembershipProvider.cs
- SelectionPatternIdentifiers.cs
- TripleDESCryptoServiceProvider.cs
- TableLayoutColumnStyleCollection.cs
- IteratorFilter.cs
- XmlCharCheckingReader.cs
- DataSourceControl.cs
- ResourceProviderFactory.cs
- SmiRecordBuffer.cs
- CustomAttributeFormatException.cs
- ADRoleFactory.cs
- DrawListViewSubItemEventArgs.cs
- XmlTypeAttribute.cs
- ResolveCriteriaCD1.cs
- TrackingDataItemValue.cs
- MenuItemCollection.cs
- EventSetterHandlerConverter.cs
- UnionCodeGroup.cs
- AndMessageFilterTable.cs
- ContainerAction.cs
- ListItemConverter.cs
- PropertyGroupDescription.cs
- CacheSection.cs
- HostExecutionContextManager.cs
- DeclarationUpdate.cs
- BulletedListEventArgs.cs
- RegionInfo.cs
- FrameworkTemplate.cs
- TcpTransportSecurity.cs
- BindingList.cs
- PathGeometry.cs
- WebPartManager.cs
- CreateUserWizardStep.cs
- BrushConverter.cs
- LinkedResourceCollection.cs
- PasswordRecoveryDesigner.cs
- MergePropertyDescriptor.cs
- BitmapEffectGroup.cs
- ZoneLinkButton.cs
- DeviceContext2.cs
- Assert.cs
- PropertyMetadata.cs
- SafeCertificateContext.cs
- PathTooLongException.cs
- indexingfiltermarshaler.cs
- TextDecorationLocationValidation.cs
- DataGridViewColumnTypeEditor.cs
- ApplicationServiceManager.cs
- InternalPolicyElement.cs
- SmiEventSink.cs
- WindowsSpinner.cs
- ToolStripDropDownMenu.cs
- XmlDataSourceView.cs
- BamlReader.cs
- ZipIOExtraFieldZip64Element.cs
- CodeTypeDelegate.cs
- Point3DCollectionConverter.cs
- PolyBezierSegment.cs
- SqlDependencyListener.cs
- RuleSettings.cs