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
- LateBoundBitmapDecoder.cs
- IIS7WorkerRequest.cs
- SafeRightsManagementHandle.cs
- RenderData.cs
- ReflectEventDescriptor.cs
- SqlConnectionManager.cs
- DbResourceAllocator.cs
- AssemblyInfo.cs
- PageBreakRecord.cs
- TransactionFlowBindingElementImporter.cs
- ConnectionsZoneAutoFormat.cs
- ExecutionContext.cs
- SchemaContext.cs
- _TransmitFileOverlappedAsyncResult.cs
- ScriptDescriptor.cs
- PartialTrustVisibleAssemblyCollection.cs
- XmlnsDictionary.cs
- TransactionFilter.cs
- PixelFormatConverter.cs
- ScrollPattern.cs
- TargetControlTypeCache.cs
- DictionaryBase.cs
- WebPartRestoreVerb.cs
- AspNetHostingPermission.cs
- WebHttpBindingElement.cs
- SessionPageStatePersister.cs
- HScrollBar.cs
- Pool.cs
- NonParentingControl.cs
- XmlReflectionMember.cs
- InputDevice.cs
- TextEditorCharacters.cs
- SelectionService.cs
- CompiledQuery.cs
- ContentPathSegment.cs
- ComboBox.cs
- NumberFunctions.cs
- VariableAction.cs
- ProxyHwnd.cs
- UiaCoreApi.cs
- HMACMD5.cs
- TextDecoration.cs
- PeerObject.cs
- XmlSchemaAny.cs
- BehaviorEditorPart.cs
- PackWebResponse.cs
- LogLogRecord.cs
- RootNamespaceAttribute.cs
- Compilation.cs
- DashStyles.cs
- CompositeDataBoundControl.cs
- SamlSerializer.cs
- SHA1Cng.cs
- LexicalChunk.cs
- DynamicILGenerator.cs
- StickyNoteContentControl.cs
- XmlSchemaValidator.cs
- Encoding.cs
- DrawingCollection.cs
- propertytag.cs
- XmlSerializerNamespaces.cs
- DetectEofStream.cs
- RowTypePropertyElement.cs
- DBNull.cs
- DocumentViewer.cs
- ObjectListCommand.cs
- ClientUtils.cs
- WmpBitmapDecoder.cs
- ObjectMemberMapping.cs
- Point3DConverter.cs
- Renderer.cs
- XmlStreamedByteStreamReader.cs
- AsymmetricKeyExchangeDeformatter.cs
- DataTableTypeConverter.cs
- InlinedAggregationOperator.cs
- XmlSchemaImporter.cs
- TextTrailingWordEllipsis.cs
- FileDialogCustomPlaces.cs
- PassportAuthentication.cs
- HtmlInputSubmit.cs
- BaseAppDomainProtocolHandler.cs
- ActivityExecutorDelegateInfo.cs
- FormatterServices.cs
- UdpContractFilterBehavior.cs
- DBCommand.cs
- InputLangChangeEvent.cs
- DataSourceXmlElementAttribute.cs
- SystemWebCachingSectionGroup.cs
- AppSettings.cs
- CommonObjectSecurity.cs
- MimeObjectFactory.cs
- ActivityDesignerHelper.cs
- UnaryOperationBinder.cs
- RulePatternOps.cs
- CryptoApi.cs
- LabelLiteral.cs
- securitycriticaldata.cs
- WebConfigurationManager.cs
- ImmComposition.cs
- RTLAwareMessageBox.cs