Code:
/ 4.0 / 4.0 / 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. // ==++== // // 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
- SrgsItemList.cs
- ScriptMethodAttribute.cs
- DynamicResourceExtension.cs
- ExecutionContext.cs
- QueryCacheKey.cs
- FieldMetadata.cs
- HttpConfigurationContext.cs
- Byte.cs
- XmlHierarchicalDataSourceView.cs
- LiteralControl.cs
- RecommendedAsConfigurableAttribute.cs
- UpdatableWrapper.cs
- ISAPIApplicationHost.cs
- ClientTargetCollection.cs
- BookmarkNameHelper.cs
- AccessibilityHelperForXpWin2k3.cs
- ImageMapEventArgs.cs
- LabelLiteral.cs
- DataGridViewComboBoxColumnDesigner.cs
- ConfigurationElementCollection.cs
- HtmlInputText.cs
- SchemaCollectionPreprocessor.cs
- Math.cs
- SequentialOutput.cs
- ValidatingReaderNodeData.cs
- DataServiceException.cs
- AppDomainManager.cs
- WebBaseEventKeyComparer.cs
- DefaultPropertiesToSend.cs
- ChannelManager.cs
- ReadOnlyCollectionBase.cs
- StateItem.cs
- SymbolEqualComparer.cs
- WebControlAdapter.cs
- ReachDocumentPageSerializer.cs
- JsonEncodingStreamWrapper.cs
- CompilerErrorCollection.cs
- XmlReader.cs
- GridProviderWrapper.cs
- ComAdminInterfaces.cs
- XmlnsDefinitionAttribute.cs
- TakeOrSkipQueryOperator.cs
- DesignerCategoryAttribute.cs
- LocalizationComments.cs
- RsaEndpointIdentity.cs
- HierarchicalDataBoundControl.cs
- SQLRoleProvider.cs
- ResourceProviderFactory.cs
- SchemaCollectionCompiler.cs
- MethodAccessException.cs
- DefaultHttpHandler.cs
- ApplicationException.cs
- PriorityBindingExpression.cs
- AsyncSerializedWorker.cs
- NumberSubstitution.cs
- XmlTextAttribute.cs
- MimeTypeAttribute.cs
- TypeForwardedToAttribute.cs
- ChannelServices.cs
- MultipartIdentifier.cs
- SqlStream.cs
- WebPartDisplayModeCancelEventArgs.cs
- DeflateInput.cs
- FilteredAttributeCollection.cs
- FixedSOMTextRun.cs
- PersonalizationProviderHelper.cs
- ConnectionStringsExpressionBuilder.cs
- basecomparevalidator.cs
- Track.cs
- SerializationUtilities.cs
- EmptyReadOnlyDictionaryInternal.cs
- StylusEditingBehavior.cs
- FormClosingEvent.cs
- DateTimeOffset.cs
- ProjectionCamera.cs
- TextSelectionHelper.cs
- RuntimeCompatibilityAttribute.cs
- BinaryConverter.cs
- DbParameterHelper.cs
- CodeNamespaceImportCollection.cs
- EncodedStreamFactory.cs
- GeneratedCodeAttribute.cs
- BitmapEffectInputData.cs
- BamlLocalizableResource.cs
- CachedPathData.cs
- StringConcat.cs
- UTF8Encoding.cs
- ExpressionDumper.cs
- Bits.cs
- __ConsoleStream.cs
- RegexGroupCollection.cs
- MultiDataTrigger.cs
- HttpRequestTraceRecord.cs
- EntitySqlQueryCacheEntry.cs
- WebConfigurationHost.cs
- FontSource.cs
- WebResourceUtil.cs
- OverloadGroupAttribute.cs
- WebSysDisplayNameAttribute.cs
- TypeLoadException.cs