Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / 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) { } } }
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ScriptManagerProxy.cs
- EntityParameterCollection.cs
- IndentedTextWriter.cs
- TriggerBase.cs
- DataGridToolTip.cs
- RenderData.cs
- PropVariant.cs
- OciLobLocator.cs
- IssuanceLicense.cs
- ChangeTracker.cs
- DateTimeConverter.cs
- PenLineCapValidation.cs
- AsyncDataRequest.cs
- CrossSiteScriptingValidation.cs
- AmbientProperties.cs
- DataServiceBuildProvider.cs
- WebPartDisplayModeCancelEventArgs.cs
- CapabilitiesState.cs
- PageAsyncTask.cs
- KeyGestureValueSerializer.cs
- PackagePart.cs
- Regex.cs
- ELinqQueryState.cs
- SqlExpander.cs
- RangeValueProviderWrapper.cs
- DiscriminatorMap.cs
- DataRecord.cs
- GenerateHelper.cs
- ConfigXmlSignificantWhitespace.cs
- ListViewGroup.cs
- SchemaMerger.cs
- MailDefinition.cs
- ZipQueryOperator.cs
- EmptyCollection.cs
- OdbcConnectionHandle.cs
- GridViewItemAutomationPeer.cs
- MimeFormImporter.cs
- ThicknessAnimation.cs
- ImageConverter.cs
- RestClientProxyHandler.cs
- Decimal.cs
- ColorConvertedBitmapExtension.cs
- TraceFilter.cs
- GroupAggregateExpr.cs
- DurationConverter.cs
- AutomationElement.cs
- WindowsRichEdit.cs
- XmlCodeExporter.cs
- FormViewModeEventArgs.cs
- NullableIntAverageAggregationOperator.cs
- ProviderConnectionPointCollection.cs
- ExpandCollapsePattern.cs
- NamedPermissionSet.cs
- Material.cs
- MD5CryptoServiceProvider.cs
- _HTTPDateParse.cs
- SubMenuStyleCollection.cs
- UserPersonalizationStateInfo.cs
- UIElementCollection.cs
- Panel.cs
- CopyEncoder.cs
- SerialStream.cs
- BaseValidator.cs
- FixedPosition.cs
- CriticalFinalizerObject.cs
- SimpleMailWebEventProvider.cs
- EventArgs.cs
- ExceptionWrapper.cs
- DbConnectionPoolIdentity.cs
- SocketElement.cs
- RecordBuilder.cs
- MetafileHeaderWmf.cs
- SystemIPv4InterfaceProperties.cs
- QueueException.cs
- ModelTreeEnumerator.cs
- PermissionSetEnumerator.cs
- Stack.cs
- MimeBasePart.cs
- ViewKeyConstraint.cs
- Inflater.cs
- CodeDelegateCreateExpression.cs
- PipeStream.cs
- LowerCaseStringConverter.cs
- DoubleLink.cs
- ToolBarButtonClickEvent.cs
- TransactionException.cs
- querybuilder.cs
- CommandManager.cs
- BufferedWebEventProvider.cs
- FloaterParaClient.cs
- ConfigurationManagerHelper.cs
- WebMethodAttribute.cs
- ResourceDictionaryCollection.cs
- TreeIterators.cs
- DbDataSourceEnumerator.cs
- ScriptReferenceEventArgs.cs
- BamlLocalizableResourceKey.cs
- WSSecureConversationFeb2005.cs
- ElementUtil.cs
- CompiledQueryCacheEntry.cs