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
- Stacktrace.cs
- RequestBringIntoViewEventArgs.cs
- UserControlParser.cs
- OrderedDictionary.cs
- ConfigXmlWhitespace.cs
- TextTreeInsertUndoUnit.cs
- BaseValidator.cs
- SchemaManager.cs
- CompleteWizardStep.cs
- PropertyGridView.cs
- TypeViewSchema.cs
- VirtualPathProvider.cs
- FilterException.cs
- SQLRoleProvider.cs
- Win32.cs
- wmiprovider.cs
- CommentEmitter.cs
- WebPartActionVerb.cs
- XslTransformFileEditor.cs
- ByteFacetDescriptionElement.cs
- NamespaceQuery.cs
- ScrollBarRenderer.cs
- RemoteWebConfigurationHostStream.cs
- TdsParserSafeHandles.cs
- LocalizabilityAttribute.cs
- ConfigurationSettings.cs
- DrawingContextDrawingContextWalker.cs
- IdleTimeoutMonitor.cs
- NameSpaceExtractor.cs
- RoleGroupCollection.cs
- SignedXml.cs
- _AutoWebProxyScriptHelper.cs
- WebPart.cs
- CacheOutputQuery.cs
- GetPageNumberCompletedEventArgs.cs
- OracleNumber.cs
- VisualTreeHelper.cs
- FlowchartStart.xaml.cs
- PriorityBinding.cs
- RegexCaptureCollection.cs
- listitem.cs
- MessageQueuePermissionEntryCollection.cs
- DataGridViewColumnTypeEditor.cs
- ResourceAssociationType.cs
- LinkButton.cs
- path.cs
- StrongName.cs
- GlobalizationSection.cs
- ThreadAttributes.cs
- RtfFormatStack.cs
- AuthenticationSection.cs
- SourceSwitch.cs
- MonthChangedEventArgs.cs
- DynamicDataRoute.cs
- CqlLexerHelpers.cs
- QueryOperator.cs
- FixedTextSelectionProcessor.cs
- DetailsViewRow.cs
- SettingsPropertyValue.cs
- JsonDataContract.cs
- ScriptingWebServicesSectionGroup.cs
- WindowsSolidBrush.cs
- FormsAuthenticationEventArgs.cs
- CatalogPartChrome.cs
- SqlUserDefinedTypeAttribute.cs
- FixedSOMFixedBlock.cs
- ErrorHandlingAcceptor.cs
- CodeSnippetStatement.cs
- WrapPanel.cs
- DrawingCollection.cs
- SocketAddress.cs
- processwaithandle.cs
- VirtualPathData.cs
- GridViewRowCollection.cs
- ExtensionDataObject.cs
- OperationResponse.cs
- StyleTypedPropertyAttribute.cs
- SelectorItemAutomationPeer.cs
- FontClient.cs
- QueryContinueDragEvent.cs
- TextServicesManager.cs
- ChtmlTextWriter.cs
- DataGridViewCellValidatingEventArgs.cs
- PropertyReferenceExtension.cs
- StyleBamlRecordReader.cs
- DynamicValidatorEventArgs.cs
- XPathQilFactory.cs
- AvTraceFormat.cs
- MetabaseSettings.cs
- ClientApiGenerator.cs
- CollectionView.cs
- DNS.cs
- SizeChangedEventArgs.cs
- CompositeCollection.cs
- ScriptingJsonSerializationSection.cs
- WsatStrings.cs
- storepermissionattribute.cs
- DataGridView.cs
- XmlnsDictionary.cs
- RadioButtonFlatAdapter.cs