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
- IndentedTextWriter.cs
- GenerateTemporaryTargetAssembly.cs
- DictionaryMarkupSerializer.cs
- IndentTextWriter.cs
- NavigationProgressEventArgs.cs
- ComboBoxItem.cs
- RestHandlerFactory.cs
- DataSet.cs
- WindowsToolbar.cs
- HTTPNotFoundHandler.cs
- DirectionalLight.cs
- Socket.cs
- SingleKeyFrameCollection.cs
- WsdlContractConversionContext.cs
- ThreadStartException.cs
- QueryAsyncResult.cs
- ActiveDocumentEvent.cs
- ObjectFullSpanRewriter.cs
- EnumValidator.cs
- HttpProfileBase.cs
- Geometry3D.cs
- DiscardableAttribute.cs
- HeaderUtility.cs
- XPathAncestorIterator.cs
- FixedSOMImage.cs
- MsmqException.cs
- PersonalizationStateQuery.cs
- ProfileInfo.cs
- ChannelEndpointElementCollection.cs
- WebHttpSecurityElement.cs
- EUCJPEncoding.cs
- SmtpTransport.cs
- String.cs
- Parser.cs
- InstanceDescriptor.cs
- SQlBooleanStorage.cs
- WebPartCollection.cs
- ObjectDataSourceMethodEditor.cs
- JumpList.cs
- Gdiplus.cs
- ListViewItem.cs
- UTF8Encoding.cs
- ToolStripDropDownDesigner.cs
- FormatSettings.cs
- TableColumn.cs
- XmlAutoDetectWriter.cs
- PropertyGridEditorPart.cs
- Crc32.cs
- MULTI_QI.cs
- Deserializer.cs
- SHA384Managed.cs
- GridViewHeaderRowPresenterAutomationPeer.cs
- DbProviderConfigurationHandler.cs
- PeerNodeAddress.cs
- EntityDataSourceContainerNameConverter.cs
- StrongTypingException.cs
- ObjectDataSourceView.cs
- EventMappingSettings.cs
- MaterialCollection.cs
- RawStylusInputCustomDataList.cs
- WebBrowser.cs
- HtmlButton.cs
- AddInEnvironment.cs
- Misc.cs
- DictionaryEntry.cs
- ReadOnlyHierarchicalDataSourceView.cs
- AutoGeneratedFieldProperties.cs
- WbmpConverter.cs
- CategoryAttribute.cs
- Dictionary.cs
- SimpleExpression.cs
- Constants.cs
- XmlEntityReference.cs
- HtmlTextArea.cs
- OutputCacheProfile.cs
- RequiredAttributeAttribute.cs
- TdsParser.cs
- xmlfixedPageInfo.cs
- UnsafeNativeMethods.cs
- ClosableStream.cs
- SessionPageStatePersister.cs
- StylusPointPropertyUnit.cs
- SecurityUniqueId.cs
- XmlElementList.cs
- IsolatedStorage.cs
- Stacktrace.cs
- XmlReflectionMember.cs
- InstanceKeyView.cs
- UnknownBitmapEncoder.cs
- TextServicesDisplayAttribute.cs
- ParenthesizePropertyNameAttribute.cs
- HtmlShimManager.cs
- DateBoldEvent.cs
- RegexCompiler.cs
- HtmlWindowCollection.cs
- FontUnitConverter.cs
- CatalogPart.cs
- CoreSwitches.cs
- MetaTable.cs
- RepeatButton.cs