Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Base / MS / Internal / WeakReferenceKey.cs / 1305600 / WeakReferenceKey.cs
//---------------------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // Description: // This file defines a class that holds a weak reference to an object. It preserves the hashcode // of the object and is intended to be used as a key in hashtables or dictionaries. // //------------------------------------------------------------------------------------- using System; using MS.Internal; namespace MS.Internal.Utility { ////// Helper class that allows using a weak reference to an item as a key in a hash table. /// internal class WeakReferenceKey{ public WeakReferenceKey(T item) { Invariant.Assert(item != null); _item = new WeakReference(item); _hashCode = item.GetHashCode(); } public T Item { get { return (T)_item.Target; } } public override bool Equals(object o) { if (o == this) return true; WeakReferenceKey key = o as WeakReferenceKey ; if (key != null) { T item = this.Item; if (item == null) return false; // a stale key matches nothing (except itself) return this._hashCode == key._hashCode && Object.Equals(item, key.Item); } return false; } public override int GetHashCode() { return _hashCode; } private WeakReference _item; private int _hashCode; } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //---------------------------------------------------------------------------------------- // // // Copyright (C) Microsoft Corporation. All rights reserved. // // // Description: // This file defines a class that holds a weak reference to an object. It preserves the hashcode // of the object and is intended to be used as a key in hashtables or dictionaries. // //------------------------------------------------------------------------------------- using System; using MS.Internal; namespace MS.Internal.Utility { ////// Helper class that allows using a weak reference to an item as a key in a hash table. /// internal class WeakReferenceKey{ public WeakReferenceKey(T item) { Invariant.Assert(item != null); _item = new WeakReference(item); _hashCode = item.GetHashCode(); } public T Item { get { return (T)_item.Target; } } public override bool Equals(object o) { if (o == this) return true; WeakReferenceKey key = o as WeakReferenceKey ; if (key != null) { T item = this.Item; if (item == null) return false; // a stale key matches nothing (except itself) return this._hashCode == key._hashCode && Object.Equals(item, key.Item); } return false; } public override int GetHashCode() { return _hashCode; } private WeakReference _item; private int _hashCode; } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ELinqQueryState.cs
- ConstructorNeedsTagAttribute.cs
- RegionInfo.cs
- PropertyRecord.cs
- StrokeCollection2.cs
- LinqDataSourceInsertEventArgs.cs
- TemplateColumn.cs
- EntitySqlQueryState.cs
- GeometryConverter.cs
- CodeIndexerExpression.cs
- MtomMessageEncoder.cs
- RtfFormatStack.cs
- KnownAssembliesSet.cs
- LambdaCompiler.ControlFlow.cs
- FreezableCollection.cs
- TimeSpanMinutesOrInfiniteConverter.cs
- DataGridTextBox.cs
- ObjectFactoryCodeDomTreeGenerator.cs
- SecUtil.cs
- VScrollBar.cs
- TextServicesDisplayAttribute.cs
- ClientData.cs
- FlowDecisionLabelFeature.cs
- UITypeEditor.cs
- TrackingProfile.cs
- IntegrationExceptionEventArgs.cs
- StreamingContext.cs
- XmlBindingWorker.cs
- CodeNamespaceImportCollection.cs
- Propagator.ExtentPlaceholderCreator.cs
- webclient.cs
- ComplexObject.cs
- CodeAttributeArgumentCollection.cs
- XamlReaderHelper.cs
- EventProxy.cs
- ZoneIdentityPermission.cs
- CodeSnippetExpression.cs
- IssuanceTokenProviderBase.cs
- XsltArgumentList.cs
- ExtendLockAsyncResult.cs
- ShortcutKeysEditor.cs
- COAUTHIDENTITY.cs
- AddingNewEventArgs.cs
- DataServiceHost.cs
- ShapingWorkspace.cs
- EdmValidator.cs
- UniqueConstraint.cs
- AppSettingsExpressionEditor.cs
- ResponseBodyWriter.cs
- MarginCollapsingState.cs
- Common.cs
- StructuredTypeEmitter.cs
- WizardStepBase.cs
- UIPermission.cs
- DataViewManagerListItemTypeDescriptor.cs
- SafeNativeMethods.cs
- VisualStyleRenderer.cs
- DefaultCommandConverter.cs
- FunctionQuery.cs
- TreeNodeCollectionEditorDialog.cs
- PathFigureCollectionConverter.cs
- TypeUtil.cs
- CommonDialog.cs
- SmiContextFactory.cs
- dbdatarecord.cs
- XmlSchemaImport.cs
- FacetDescription.cs
- ManipulationLogic.cs
- XmlSchemaObjectCollection.cs
- TextSelectionHighlightLayer.cs
- HttpProxyTransportBindingElement.cs
- Hex.cs
- MemberMaps.cs
- XmlValidatingReader.cs
- ScriptMethodAttribute.cs
- EntityViewGenerator.cs
- XNodeNavigator.cs
- ContainerFilterService.cs
- EditCommandColumn.cs
- RelatedPropertyManager.cs
- PartialTrustHelpers.cs
- EncryptedKey.cs
- TextParagraphProperties.cs
- ArgumentFixer.cs
- BitmapCache.cs
- SqlBulkCopyColumnMapping.cs
- MethodBuilderInstantiation.cs
- Sql8ConformanceChecker.cs
- XamlUtilities.cs
- HGlobalSafeHandle.cs
- MiniAssembly.cs
- MethodCallConverter.cs
- DbConnectionPoolGroupProviderInfo.cs
- Operand.cs
- XPathBuilder.cs
- PriorityItem.cs
- EmptyImpersonationContext.cs
- TextServicesContext.cs
- DesignerCapabilities.cs
- LinqDataSourceValidationException.cs