Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / 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
- Page.cs
- LineServicesCallbacks.cs
- BrowserDefinitionCollection.cs
- RemoveStoryboard.cs
- ExpandoClass.cs
- DesignerActionUIStateChangeEventArgs.cs
- Scheduling.cs
- Message.cs
- ForeignKeyFactory.cs
- PreloadHost.cs
- EnterpriseServicesHelper.cs
- BitmapImage.cs
- EntityCollection.cs
- Menu.cs
- StringKeyFrameCollection.cs
- PasswordTextContainer.cs
- XmlSerializationGeneratedCode.cs
- ImageAttributes.cs
- TdsRecordBufferSetter.cs
- ServiceBehaviorElementCollection.cs
- TreeView.cs
- ServiceHttpModule.cs
- XmlJsonReader.cs
- ParserExtension.cs
- ParameterElement.cs
- EncodingStreamWrapper.cs
- FunctionImportElement.cs
- Subtree.cs
- ReflectionTypeLoadException.cs
- Dynamic.cs
- ReadOnlyTernaryTree.cs
- FunctionDescription.cs
- AbandonedMutexException.cs
- WsdlInspector.cs
- TripleDESCryptoServiceProvider.cs
- DelayedRegex.cs
- EmbeddedMailObject.cs
- HtmlControlAdapter.cs
- BitmapSourceSafeMILHandle.cs
- FreezableDefaultValueFactory.cs
- DataSourceSelectArguments.cs
- TableAdapterManagerMethodGenerator.cs
- NonBatchDirectoryCompiler.cs
- HtmlDocument.cs
- XsltFunctions.cs
- QuestionEventArgs.cs
- PerfCounterSection.cs
- ExtensionDataObject.cs
- Command.cs
- SqlClientWrapperSmiStreamChars.cs
- FileIOPermission.cs
- CheckBoxStandardAdapter.cs
- OracleRowUpdatingEventArgs.cs
- BulletedList.cs
- XPathBinder.cs
- BuildResultCache.cs
- CryptoStream.cs
- ZipIOFileItemStream.cs
- DataControlPagerLinkButton.cs
- LookupTables.cs
- PolyBezierSegment.cs
- FunctionOverloadResolver.cs
- FrameDimension.cs
- ParameterBuilder.cs
- comcontractssection.cs
- BufferedResponseStream.cs
- FamilyMapCollection.cs
- WhitespaceRuleLookup.cs
- RepeaterItemEventArgs.cs
- QilFactory.cs
- FakeModelItemImpl.cs
- HideDisabledControlAdapter.cs
- NamedElement.cs
- ColorMatrix.cs
- FrameworkElementAutomationPeer.cs
- UntrustedRecipientException.cs
- XPathNodeInfoAtom.cs
- TextWriterEngine.cs
- xsdvalidator.cs
- WebPartConnectionsConfigureVerb.cs
- SiteMapProvider.cs
- BaseDataList.cs
- DataListItemCollection.cs
- DrawListViewSubItemEventArgs.cs
- AssertSection.cs
- _KerberosClient.cs
- XamlPathDataSerializer.cs
- WebPartCatalogAddVerb.cs
- CompositeScriptReference.cs
- DocumentXPathNavigator.cs
- TemplateBindingExtensionConverter.cs
- WindowsAltTab.cs
- XmlSchemaSubstitutionGroup.cs
- DbCommandTree.cs
- XmlSchemaSimpleContentExtension.cs
- ConstructorNeedsTagAttribute.cs
- CompModSwitches.cs
- WindowClosedEventArgs.cs
- SimpleBitVector32.cs
- TableLayoutStyle.cs