Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- XmlDocument.cs
- MappedMetaModel.cs
- WebPartAuthorizationEventArgs.cs
- MailDefinitionBodyFileNameEditor.cs
- HealthMonitoringSectionHelper.cs
- DeploymentSection.cs
- SecurityTokenException.cs
- SqlProviderUtilities.cs
- ImageCodecInfo.cs
- PriorityItem.cs
- PersistenceTypeAttribute.cs
- DataObjectAttribute.cs
- XmlSchemaSimpleType.cs
- TagNameToTypeMapper.cs
- QilLoop.cs
- DataGridComboBoxColumn.cs
- WeakReadOnlyCollection.cs
- TerminatorSinks.cs
- ProfileManager.cs
- AttributeAction.cs
- EntryWrittenEventArgs.cs
- HttpMethodConstraint.cs
- GeneralTransform3DCollection.cs
- OracleString.cs
- HiddenFieldPageStatePersister.cs
- PathTooLongException.cs
- XmlFormatWriterGenerator.cs
- Positioning.cs
- SamlNameIdentifierClaimResource.cs
- Boolean.cs
- GridPattern.cs
- recordstatefactory.cs
- DataGridColumnCollection.cs
- GroupedContextMenuStrip.cs
- _LocalDataStore.cs
- ObjectQuery_EntitySqlExtensions.cs
- Profiler.cs
- OletxTransactionHeader.cs
- UnsafeNativeMethods.cs
- DataGridViewCellStateChangedEventArgs.cs
- HttpProtocolImporter.cs
- ChameleonKey.cs
- UIElement3D.cs
- EntityDataSourceWrapper.cs
- EntryIndex.cs
- COM2ComponentEditor.cs
- FilterEventArgs.cs
- XmlUtil.cs
- BypassElementCollection.cs
- MetaForeignKeyColumn.cs
- FuncTypeConverter.cs
- IsolatedStoragePermission.cs
- PageAction.cs
- AuthorizationSection.cs
- SQLStringStorage.cs
- InternalConfigHost.cs
- SpellerInterop.cs
- Helpers.cs
- Inflater.cs
- PieceDirectory.cs
- ScrollableControl.cs
- GlobalizationAssembly.cs
- TypeToken.cs
- TextRangeProviderWrapper.cs
- CaseExpr.cs
- ImpersonationContext.cs
- SqlCommandBuilder.cs
- SecureEnvironment.cs
- XamlPathDataSerializer.cs
- ExtendedTransformFactory.cs
- HtmlTextArea.cs
- validationstate.cs
- ElementFactory.cs
- ProcessStartInfo.cs
- WinFormsUtils.cs
- StringOutput.cs
- PrePostDescendentsWalker.cs
- XPathMessageContext.cs
- ipaddressinformationcollection.cs
- RelationshipManager.cs
- AttributeUsageAttribute.cs
- JobCollate.cs
- CompensatableTransactionScopeActivity.cs
- MD5Cng.cs
- DataGridViewSortCompareEventArgs.cs
- MessageBox.cs
- FixedDocumentPaginator.cs
- DrawListViewItemEventArgs.cs
- ListViewItemEventArgs.cs
- MenuItemAutomationPeer.cs
- QuaternionAnimationUsingKeyFrames.cs
- WebPartConnectionsCancelVerb.cs
- PermissionSet.cs
- XmlNode.cs
- InkPresenter.cs
- SkewTransform.cs
- ListBoxItem.cs
- NativeMethods.cs
- BindingMemberInfo.cs
- FilterableAttribute.cs