Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- RNGCryptoServiceProvider.cs
- ColumnTypeConverter.cs
- CodeCatchClause.cs
- ManagementEventArgs.cs
- SecurityHeaderTokenResolver.cs
- SQLMembershipProvider.cs
- FragmentNavigationEventArgs.cs
- DbgUtil.cs
- XPathNavigator.cs
- RoleService.cs
- LineInfo.cs
- UIElementParagraph.cs
- ApplicationDirectory.cs
- DbProviderFactoriesConfigurationHandler.cs
- InProcStateClientManager.cs
- CapabilitiesAssignment.cs
- RbTree.cs
- ContentTextAutomationPeer.cs
- HWStack.cs
- TriggerActionCollection.cs
- SHA256.cs
- DisplayNameAttribute.cs
- ProjectedWrapper.cs
- WebAdminConfigurationHelper.cs
- StatusBarItemAutomationPeer.cs
- WebPartEventArgs.cs
- TypeDefinition.cs
- ParameterCollection.cs
- JoinCqlBlock.cs
- _NestedSingleAsyncResult.cs
- SqlColumnizer.cs
- AccessibilityApplicationManager.cs
- PeerPresenceInfo.cs
- ToolStripRenderEventArgs.cs
- Msmq4SubqueuePoisonHandler.cs
- NetworkStream.cs
- XmlFormatMapping.cs
- Constraint.cs
- RowsCopiedEventArgs.cs
- CatalogPart.cs
- PointHitTestResult.cs
- StringComparer.cs
- ChoiceConverter.cs
- CodeDomSerializerException.cs
- HtmlEmptyTagControlBuilder.cs
- DataListAutoFormat.cs
- OleDbDataAdapter.cs
- PageFunction.cs
- ExtensionSimplifierMarkupObject.cs
- DataControlFieldCell.cs
- IOException.cs
- TextFragmentEngine.cs
- DbSetClause.cs
- MarkupExtensionReturnTypeAttribute.cs
- XmlTextEncoder.cs
- HiddenFieldPageStatePersister.cs
- ISCIIEncoding.cs
- CodeDefaultValueExpression.cs
- ArgumentElement.cs
- TypeUsage.cs
- FormsAuthenticationModule.cs
- AutomationIdentifier.cs
- HybridCollection.cs
- Number.cs
- CategoriesDocument.cs
- MergePropertyDescriptor.cs
- COM2ExtendedTypeConverter.cs
- MembershipSection.cs
- Context.cs
- IndexedString.cs
- DataGridViewCellValidatingEventArgs.cs
- LoginView.cs
- DataSourceBooleanViewSchemaConverter.cs
- SqlUnionizer.cs
- DBSqlParser.cs
- ConstructorNeedsTagAttribute.cs
- ArgumentNullException.cs
- RuntimeHelpers.cs
- ECDiffieHellman.cs
- XmlSerializerFactory.cs
- InfoCardRSAOAEPKeyExchangeFormatter.cs
- WebBrowserPermission.cs
- QilLoop.cs
- ResourceSetExpression.cs
- WindowsSpinner.cs
- EventWaitHandleSecurity.cs
- ManagementScope.cs
- ChangePassword.cs
- ValueUtilsSmi.cs
- SqlTypesSchemaImporter.cs
- CodeSubDirectoriesCollection.cs
- NamespaceExpr.cs
- HtmlInputControl.cs
- PropertyTabChangedEvent.cs
- StoreConnection.cs
- Activity.cs
- PerformanceCounterNameAttribute.cs
- _SSPIWrapper.cs
- SQLByte.cs
- ControlAdapter.cs