Code:
/ FX-1434 / FX-1434 / 1.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
- TypeDependencyAttribute.cs
- WebPartMenuStyle.cs
- ModelItemCollectionImpl.cs
- QilStrConcatenator.cs
- HyperLink.cs
- UserPreferenceChangedEventArgs.cs
- WmlObjectListAdapter.cs
- InvokeGenerator.cs
- MouseGestureValueSerializer.cs
- CellTreeNodeVisitors.cs
- DBDataPermissionAttribute.cs
- ProxyHwnd.cs
- ValueChangedEventManager.cs
- WebPartMovingEventArgs.cs
- BlurEffect.cs
- LogoValidationException.cs
- XmlSchemaExternal.cs
- ListViewItem.cs
- WindowsToolbar.cs
- SHA256Managed.cs
- XmlEnumAttribute.cs
- TaskHelper.cs
- OperationAbortedException.cs
- JapaneseLunisolarCalendar.cs
- SQLMoneyStorage.cs
- Camera.cs
- DelimitedListTraceListener.cs
- storepermissionattribute.cs
- ParseNumbers.cs
- ActivityDesigner.cs
- WebHttpSecurityModeHelper.cs
- WindowsBrush.cs
- XmlNodeChangedEventArgs.cs
- TableCellCollection.cs
- UnsafeNativeMethods.cs
- RequestDescription.cs
- SqlClientWrapperSmiStream.cs
- Geometry3D.cs
- DesignerProperties.cs
- IntSecurity.cs
- RouteItem.cs
- AuthenticationModuleElementCollection.cs
- ToolboxBitmapAttribute.cs
- QilXmlWriter.cs
- Config.cs
- XappLauncher.cs
- ToolStripItemImageRenderEventArgs.cs
- DataControlField.cs
- FormatConvertedBitmap.cs
- ExpressionBuilder.cs
- LightweightCodeGenerator.cs
- ToolStripDropDownClosingEventArgs.cs
- StringPropertyBuilder.cs
- ManageRequest.cs
- ObjectDataSourceEventArgs.cs
- ResXResourceSet.cs
- MenuItemCollectionEditorDialog.cs
- Errors.cs
- SecuritySessionSecurityTokenProvider.cs
- DataGridViewColumnCollection.cs
- EncoderNLS.cs
- MetabaseServerConfig.cs
- TemplateBindingExpression.cs
- SID.cs
- BindingContext.cs
- LOSFormatter.cs
- PagesChangedEventArgs.cs
- AsyncDataRequest.cs
- PrintingPermissionAttribute.cs
- AuthenticationSection.cs
- _Semaphore.cs
- NativeMethodsCLR.cs
- Cursor.cs
- ManagementEventArgs.cs
- FormsIdentity.cs
- ScriptControl.cs
- LinqDataSourceSelectEventArgs.cs
- Vertex.cs
- TextCollapsingProperties.cs
- SmiRecordBuffer.cs
- StateDesignerConnector.cs
- TypedTableBaseExtensions.cs
- ResourceDescriptionAttribute.cs
- XmlSerializerNamespaces.cs
- SmiMetaDataProperty.cs
- SafeFileMapViewHandle.cs
- DictionaryEntry.cs
- ComponentEditorPage.cs
- DataContractJsonSerializerOperationFormatter.cs
- ProtectedConfigurationSection.cs
- NodeCounter.cs
- Encoder.cs
- CheckBoxList.cs
- Queue.cs
- DataRelationCollection.cs
- SemanticResultKey.cs
- SQLInt32Storage.cs
- DataGridViewAutoSizeModeEventArgs.cs
- RowUpdatingEventArgs.cs
- SupportingTokenBindingElement.cs