Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Base / System / Collections / ObjectModel / WeakReadOnlyCollection.cs / 1305600 / WeakReadOnlyCollection.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== // This is basically copied from ReadOnlyCollection, with just enough modification // to support storage of items as WeakReferences. Use of internal BCL features // is commented out. // Most of the O(N) operations - Contains, IndexOf, etc. - // are implemented by simply exploding the base list into a List . This isn't // particularly efficient, but we don't expect to use these methods very often. // The important scenario is one where we need WR not because we expect the targets // to die (we don't), but because we need to avoid creating cycles containing the // WeakReadOnlyCollection. Thus we don't check for WR.Target==null. namespace System.Collections.ObjectModel { using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Windows; using MS.Internal.WindowsBase; // [FriendAccessAllowed] [Serializable] [System.Runtime.InteropServices.ComVisible(false)] //[DebuggerTypeProxy(typeof(Mscorlib_CollectionDebugView<>))] [DebuggerDisplay("Count = {Count}")] [FriendAccessAllowed] internal class WeakReadOnlyCollection : IList , IList { //IList list; IList list; [NonSerialized] private Object _syncRoot; public WeakReadOnlyCollection(IList list) { // assumption: the WRs in list refer to T's if (list == null) { throw new ArgumentNullException("list"); } this.list = list; } public int Count { get { return list.Count; } } public T this[int index] { //get { return list[index]; } get { return (T)list[index].Target; } } public bool Contains(T value) { //return list.Contains(value); return CreateDereferencedList().Contains(value); } public void CopyTo(T[] array, int index) { //list.CopyTo(array, index); CreateDereferencedList().CopyTo(array, index); } public IEnumerator GetEnumerator() { //return list.GetEnumerator(); return new WeakEnumerator(list.GetEnumerator()); } public int IndexOf(T value) { //return list.IndexOf(value); return CreateDereferencedList().IndexOf(value); } /* protected IList Items { get { return list; } } */ bool ICollection .IsReadOnly { get { return true; } } T IList .this[int index] { //get { return list[index]; } get { return (T)list[index].Target; } set { //ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection); throw new NotSupportedException(SR.Get(SRID.NotSupported_ReadOnlyCollection)); } } void ICollection .Add(T value) { //ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection); throw new NotSupportedException(SR.Get(SRID.NotSupported_ReadOnlyCollection)); } void ICollection .Clear() { //ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection); throw new NotSupportedException(SR.Get(SRID.NotSupported_ReadOnlyCollection)); } void IList .Insert(int index, T value) { //ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection); throw new NotSupportedException(SR.Get(SRID.NotSupported_ReadOnlyCollection)); } bool ICollection .Remove(T value) { //ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection); throw new NotSupportedException(SR.Get(SRID.NotSupported_ReadOnlyCollection)); //return false; } void IList .RemoveAt(int index) { //ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection); throw new NotSupportedException(SR.Get(SRID.NotSupported_ReadOnlyCollection)); } IEnumerator IEnumerable.GetEnumerator() { //return ((IEnumerable)list).GetEnumerator(); return new WeakEnumerator(((IEnumerable)list).GetEnumerator()); } bool ICollection.IsSynchronized { get { return false; } } object ICollection.SyncRoot { get { if( _syncRoot == null) { ICollection c = list as ICollection; if( c != null) { _syncRoot = c.SyncRoot; } else { System.Threading.Interlocked.CompareExchange
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- FtpWebRequest.cs
- IndexerHelper.cs
- TrackingMemoryStreamFactory.cs
- CorrelationManager.cs
- CodeCommentStatementCollection.cs
- TextRangeEditTables.cs
- DynamicMethod.cs
- WebBrowserBase.cs
- GridViewRowEventArgs.cs
- EpmContentSerializerBase.cs
- IFlowDocumentViewer.cs
- TextViewSelectionProcessor.cs
- EmbeddedMailObjectsCollection.cs
- NativeMethods.cs
- SystemResourceHost.cs
- SchemaAttDef.cs
- DeviceSpecificChoiceCollection.cs
- UrlParameterWriter.cs
- Model3DGroup.cs
- IArgumentProvider.cs
- Cloud.cs
- ThreadAttributes.cs
- SmtpMail.cs
- StorageTypeMapping.cs
- DataTemplateKey.cs
- BuildProvider.cs
- DefaultWorkflowTransactionService.cs
- SqlDesignerDataSourceView.cs
- StorageMappingItemCollection.cs
- CaseInsensitiveComparer.cs
- TextAnchor.cs
- TreeNodeCollection.cs
- ConstantSlot.cs
- ListParaClient.cs
- DrawToolTipEventArgs.cs
- IndexedString.cs
- GridViewPageEventArgs.cs
- TargetFrameworkUtil.cs
- SharedPersonalizationStateInfo.cs
- Soap12ProtocolReflector.cs
- NoneExcludedImageIndexConverter.cs
- SafeArrayRankMismatchException.cs
- OutputWindow.cs
- SystemWebSectionGroup.cs
- ZipIOExtraFieldZip64Element.cs
- LockedHandleGlyph.cs
- PropertyPathWorker.cs
- CollectionType.cs
- TextContainerChangeEventArgs.cs
- ColorMap.cs
- CheckBoxAutomationPeer.cs
- FixedHyperLink.cs
- NumericExpr.cs
- CellCreator.cs
- ChannelFactoryRefCache.cs
- ListBoxItemWrapperAutomationPeer.cs
- SafeNativeMethodsCLR.cs
- IOThreadScheduler.cs
- DefaultDiscoveryServiceExtension.cs
- ChoiceConverter.cs
- QueryReaderSettings.cs
- VirtualPathUtility.cs
- TextureBrush.cs
- RegionData.cs
- SQLRoleProvider.cs
- CommandPlan.cs
- Timer.cs
- ObjectItemNoOpAssemblyLoader.cs
- CodeLabeledStatement.cs
- SemanticResolver.cs
- CustomErrorsSectionWrapper.cs
- XslNumber.cs
- TextAutomationPeer.cs
- RemoteWebConfigurationHostStream.cs
- SimpleRecyclingCache.cs
- ReadOnlyDataSource.cs
- ListView.cs
- CompositeDuplexBindingElementImporter.cs
- CookieHandler.cs
- TraceSection.cs
- MailSettingsSection.cs
- DbBuffer.cs
- MinimizableAttributeTypeConverter.cs
- Set.cs
- arc.cs
- PropertyMapper.cs
- GatewayIPAddressInformationCollection.cs
- MDIClient.cs
- WeakRefEnumerator.cs
- EventDescriptorCollection.cs
- AnnotationResourceChangedEventArgs.cs
- QilStrConcat.cs
- CryptoConfig.cs
- dataSvcMapFileLoader.cs
- Operand.cs
- WindowsSysHeader.cs
- GridItemCollection.cs
- Int64AnimationBase.cs
- CodeTypeParameter.cs
- BindableTemplateBuilder.cs