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
- SqlIdentifier.cs
- PermissionListSet.cs
- MembershipPasswordException.cs
- DirectoryInfo.cs
- CharUnicodeInfo.cs
- DocobjHost.cs
- ExtendedTransformFactory.cs
- CqlLexerHelpers.cs
- TypeNameConverter.cs
- UpdateTranslator.cs
- DummyDataSource.cs
- infer.cs
- Internal.cs
- HtmlGenericControl.cs
- StreamMarshaler.cs
- ResXResourceSet.cs
- RegexNode.cs
- XXXOnTypeBuilderInstantiation.cs
- WorkflowQueuingService.cs
- mansign.cs
- OledbConnectionStringbuilder.cs
- TerminatorSinks.cs
- RawStylusActions.cs
- CaseInsensitiveComparer.cs
- TransactionContext.cs
- SimpleTableProvider.cs
- MapPathBasedVirtualPathProvider.cs
- ToolStripPanelDesigner.cs
- MsmqIntegrationAppDomainProtocolHandler.cs
- SqlBulkCopyColumnMappingCollection.cs
- Style.cs
- EventLogPermissionEntry.cs
- SystemIPAddressInformation.cs
- ExpressionParser.cs
- HuffmanTree.cs
- CodeAccessPermission.cs
- ListBox.cs
- FixedSOMElement.cs
- ObjectListDesigner.cs
- RuntimeHandles.cs
- FrameworkContentElement.cs
- ServiceModelReg.cs
- TaiwanCalendar.cs
- CodeChecksumPragma.cs
- MatrixTransform.cs
- Image.cs
- Pen.cs
- SectionXmlInfo.cs
- NavigatingCancelEventArgs.cs
- ParseHttpDate.cs
- ScrollChrome.cs
- SpeechDetectedEventArgs.cs
- KoreanLunisolarCalendar.cs
- PngBitmapEncoder.cs
- FieldToken.cs
- ScriptingSectionGroup.cs
- BitmapEffect.cs
- CorrelationManager.cs
- XslCompiledTransform.cs
- UIElementParaClient.cs
- SmtpNetworkElement.cs
- DataTableMapping.cs
- RoutedCommand.cs
- PassportAuthenticationModule.cs
- UnsafeNativeMethods.cs
- StreamGeometry.cs
- SiteMapProvider.cs
- TransactionChannelFaultConverter.cs
- SafeIUnknown.cs
- StrokeNodeEnumerator.cs
- listitem.cs
- JsonDataContract.cs
- XmlWriter.cs
- FamilyTypefaceCollection.cs
- IODescriptionAttribute.cs
- DictionaryBase.cs
- UrlMapping.cs
- EntityExpressionVisitor.cs
- TextDecoration.cs
- PropertyReferenceSerializer.cs
- PagePropertiesChangingEventArgs.cs
- NativeMethodsOther.cs
- KeyFrames.cs
- XmlSiteMapProvider.cs
- SizeF.cs
- SizeF.cs
- SeverityFilter.cs
- ObjectViewEntityCollectionData.cs
- OleDbInfoMessageEvent.cs
- COM2ExtendedUITypeEditor.cs
- ClonableStack.cs
- ProtocolViolationException.cs
- smtppermission.cs
- WebEventTraceProvider.cs
- ExpandSegmentCollection.cs
- TraceSection.cs
- Nullable.cs
- Version.cs
- QilTargetType.cs
- SettingsContext.cs