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
- ListBox.cs
- Int16Converter.cs
- Utility.cs
- DeleteStoreRequest.cs
- StandardMenuStripVerb.cs
- XmlCharacterData.cs
- Duration.cs
- XPathAxisIterator.cs
- CodePageEncoding.cs
- AuthenticationSection.cs
- StylusTip.cs
- CreateSequenceResponse.cs
- UIElement.cs
- Memoizer.cs
- ToolStripItemCollection.cs
- DataViewManagerListItemTypeDescriptor.cs
- DataQuery.cs
- ParameterModifier.cs
- CollectionViewGroup.cs
- TextParaLineResult.cs
- GeometryCombineModeValidation.cs
- SqlConnectionString.cs
- SecurityTokenResolver.cs
- TransformerInfoCollection.cs
- HashAlgorithm.cs
- Timer.cs
- SymbolMethod.cs
- RegularExpressionValidator.cs
- SliderAutomationPeer.cs
- wgx_exports.cs
- LambdaCompiler.cs
- panel.cs
- CommandHelpers.cs
- safemediahandle.cs
- WCFServiceClientProxyGenerator.cs
- EntityPropertyMappingAttribute.cs
- ExpressionConverter.cs
- ProfileManager.cs
- WinEventWrap.cs
- DataRowCollection.cs
- StatusBar.cs
- WebBaseEventKeyComparer.cs
- LinqDataSourceHelper.cs
- StyleHelper.cs
- RangeEnumerable.cs
- ItemTypeToolStripMenuItem.cs
- MultipartContentParser.cs
- Registry.cs
- StylusCollection.cs
- SQLMoneyStorage.cs
- ResourceDescriptionAttribute.cs
- CollectionChangedEventManager.cs
- DelegateSerializationHolder.cs
- ExceptionUtility.cs
- SqlDataSourceAdvancedOptionsForm.cs
- CounterSampleCalculator.cs
- FlowchartStart.xaml.cs
- ReliabilityContractAttribute.cs
- CryptoConfig.cs
- PathStreamGeometryContext.cs
- EventSetterHandlerConverter.cs
- WinInetCache.cs
- ExtenderProvidedPropertyAttribute.cs
- Translator.cs
- SoapFormatterSinks.cs
- WizardSideBarListControlItem.cs
- XmlLangPropertyAttribute.cs
- PkcsMisc.cs
- DesignerSerializerAttribute.cs
- SspiNegotiationTokenProviderState.cs
- WebPartsPersonalizationAuthorization.cs
- ToolStripKeyboardHandlingService.cs
- ComponentChangedEvent.cs
- HtmlFormWrapper.cs
- AutoResetEvent.cs
- ManipulationDeltaEventArgs.cs
- ValidatorUtils.cs
- StreamAsIStream.cs
- ManagedFilter.cs
- TextBox.cs
- NullRuntimeConfig.cs
- LazyTextWriterCreator.cs
- Number.cs
- SettingsPropertyNotFoundException.cs
- XmlHelper.cs
- EventMappingSettings.cs
- BinHexDecoder.cs
- Stylesheet.cs
- hresults.cs
- CompiledIdentityConstraint.cs
- ChangeInterceptorAttribute.cs
- DesignerActionList.cs
- EpmHelper.cs
- AsyncCodeActivity.cs
- AppManager.cs
- InheritedPropertyChangedEventArgs.cs
- ReflectTypeDescriptionProvider.cs
- Propagator.cs
- EtwTrace.cs
- InlineUIContainer.cs