Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / ndp / fx / src / CompMod / System / ComponentModel / Container.cs / 1 / Container.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.ComponentModel { using System; using System.ComponentModel; using System.Diagnostics; using System.Globalization; using System.IO; using System.Security.Permissions; ////// [HostProtection(SharedState = true)] public class Container : IContainer { private ISite[] sites; private int siteCount; private ComponentCollection components; private ContainerFilterService filter; private bool checkedFilter; private object syncObj = new Object(); ~Container() { Dispose(false); } // Adds a component to the container. ////// Encapsulates /// zero or more components. /// ////// public virtual void Add(IComponent component) { Add(component, null); } // Adds a component to the container. ////// Adds the specified component to the ////// . The component is unnamed. /// /// public virtual void Add(IComponent component, String name) { lock (syncObj) { if (component == null) { return; } ISite site = component.Site; if (site != null && site.Container == this) { return; } if (sites == null) { sites = new ISite[4]; } else { // Validate that new components // have either a null name or a unique one. // ValidateName(component, name); if (sites.Length == siteCount) { ISite[] newSites = new ISite[siteCount * 2]; Array.Copy(sites, 0, newSites, 0, siteCount); sites = newSites; } } if (site != null) { site.Container.Remove(component); } ISite newSite = CreateSite(component, name); sites[siteCount++] = newSite; component.Site = newSite; components = null; } } // Creates a site for the component within the container. ////// Adds the specified component to the ///and assigns a name to /// it. /// /// protected virtual ISite CreateSite(IComponent component, string name) { return new Site(component, this, name); } // Disposes of the container. A call to the Dispose method indicates that // the user of the container has no further need for it. // // The implementation of Dispose must: // // (1) Remove any references the container is holding to other components. // This is typically accomplished by assigning null to any fields that // contain references to other components. // // (2) Release any system resources that are associated with the container, // such as file handles, window handles, or database connections. // // (3) Dispose of child components by calling the Dispose method of each. // // Ideally, a call to Dispose will revert a container to the state it was // in immediately after it was created. However, this is not a requirement. // Following a call to its Dispose method, a container is permitted to raise // exceptions for operations that cannot meaningfully be performed. // ///Creates a Site ///for the given /// and assigns the given name to the site. /// public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (disposing) { lock (syncObj) { while (siteCount > 0) { ISite site = sites[--siteCount]; site.Component.Site = null; site.Component.Dispose(); } sites = null; components = null; } } } ////// Disposes of the ////// . /// /// protected virtual object GetService(Type service) { return((service == typeof(IContainer)) ? this : null); } // The components in the container. ///[To be supplied.] ////// public virtual ComponentCollection Components { get { lock (syncObj) { if (components == null) { IComponent[] result = new IComponent[siteCount]; for (int i = 0; i < siteCount; i++) { result[i] = sites[i].Component; } components = new ComponentCollection(result); // At each component add, if we don't yet have a filter, look for one. // Components may add filters. if (filter == null && checkedFilter) { checkedFilter = false; } } if (!checkedFilter) { filter = GetService(typeof(ContainerFilterService)) as ContainerFilterService; checkedFilter = true; } if (filter != null) { ComponentCollection filteredComponents = filter.FilterComponents(components); Debug.Assert(filteredComponents != null, "Incorrect ContainerFilterService implementation."); if (filteredComponents != null) { components = filteredComponents; } } return components; } } } // Removes a component from the container. ////// Gets all the components in the ////// . /// /// public virtual void Remove(IComponent component) { Remove(component, false); } private void Remove(IComponent component, bool preserveSite) { lock (syncObj) { if (component == null) return; ISite site = component.Site; if (site == null || site.Container != this) return; if (!preserveSite) component.Site = null; for (int i = 0; i < siteCount; i++) { if (sites[i] == site) { siteCount--; Array.Copy(sites, i + 1, sites, i, siteCount - i); sites[siteCount] = null; components = null; break; } } } } protected void RemoveWithoutUnsiting(IComponent component) { Remove(component, true); } ////// Removes a component from the ////// . /// /// Validates that the given name is valid for a component. The default implementation /// verifies that name is either null or unique compared to the names of other /// components in the container. /// protected virtual void ValidateName(IComponent component, string name) { if (component == null) { throw new ArgumentNullException("component"); } if (name != null) { for (int i = 0; i < Math.Min(siteCount,sites.Length); i++) { ISite s = sites[ i ]; if (s != null && s.Name != null && string.Equals(s.Name, name, StringComparison.OrdinalIgnoreCase) && s.Component != component) { InheritanceAttribute inheritanceAttribute = (InheritanceAttribute)TypeDescriptor.GetAttributes(s.Component)[typeof(InheritanceAttribute)]; if(inheritanceAttribute.InheritanceLevel != InheritanceLevel.InheritedReadOnly) { throw new ArgumentException(SR.GetString(SR.DuplicateComponentName, name)); } } } } } private class Site : ISite { private IComponent component; private Container container; private String name; internal Site(IComponent component, Container container, String name) { this.component = component; this.container = container; this.name = name; } // The component sited by this component site. public IComponent Component { get { return component; } } // The container in which the component is sited. public IContainer Container { get { return container; } } public Object GetService(Type service) { return((service == typeof(ISite)) ? this : container.GetService(service)); } // Indicates whether the component is in design mode. public bool DesignMode { get { return false; } } // The name of the component. // public String Name { get { return name;} set { if (value == null || name == null || !value.Equals(name)) { // container.ValidateName(component, value); name = value; } } } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.ComponentModel { using System; using System.ComponentModel; using System.Diagnostics; using System.Globalization; using System.IO; using System.Security.Permissions; ////// [HostProtection(SharedState = true)] public class Container : IContainer { private ISite[] sites; private int siteCount; private ComponentCollection components; private ContainerFilterService filter; private bool checkedFilter; private object syncObj = new Object(); ~Container() { Dispose(false); } // Adds a component to the container. ////// Encapsulates /// zero or more components. /// ////// public virtual void Add(IComponent component) { Add(component, null); } // Adds a component to the container. ////// Adds the specified component to the ////// . The component is unnamed. /// /// public virtual void Add(IComponent component, String name) { lock (syncObj) { if (component == null) { return; } ISite site = component.Site; if (site != null && site.Container == this) { return; } if (sites == null) { sites = new ISite[4]; } else { // Validate that new components // have either a null name or a unique one. // ValidateName(component, name); if (sites.Length == siteCount) { ISite[] newSites = new ISite[siteCount * 2]; Array.Copy(sites, 0, newSites, 0, siteCount); sites = newSites; } } if (site != null) { site.Container.Remove(component); } ISite newSite = CreateSite(component, name); sites[siteCount++] = newSite; component.Site = newSite; components = null; } } // Creates a site for the component within the container. ////// Adds the specified component to the ///and assigns a name to /// it. /// /// protected virtual ISite CreateSite(IComponent component, string name) { return new Site(component, this, name); } // Disposes of the container. A call to the Dispose method indicates that // the user of the container has no further need for it. // // The implementation of Dispose must: // // (1) Remove any references the container is holding to other components. // This is typically accomplished by assigning null to any fields that // contain references to other components. // // (2) Release any system resources that are associated with the container, // such as file handles, window handles, or database connections. // // (3) Dispose of child components by calling the Dispose method of each. // // Ideally, a call to Dispose will revert a container to the state it was // in immediately after it was created. However, this is not a requirement. // Following a call to its Dispose method, a container is permitted to raise // exceptions for operations that cannot meaningfully be performed. // ///Creates a Site ///for the given /// and assigns the given name to the site. /// public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (disposing) { lock (syncObj) { while (siteCount > 0) { ISite site = sites[--siteCount]; site.Component.Site = null; site.Component.Dispose(); } sites = null; components = null; } } } ////// Disposes of the ////// . /// /// protected virtual object GetService(Type service) { return((service == typeof(IContainer)) ? this : null); } // The components in the container. ///[To be supplied.] ////// public virtual ComponentCollection Components { get { lock (syncObj) { if (components == null) { IComponent[] result = new IComponent[siteCount]; for (int i = 0; i < siteCount; i++) { result[i] = sites[i].Component; } components = new ComponentCollection(result); // At each component add, if we don't yet have a filter, look for one. // Components may add filters. if (filter == null && checkedFilter) { checkedFilter = false; } } if (!checkedFilter) { filter = GetService(typeof(ContainerFilterService)) as ContainerFilterService; checkedFilter = true; } if (filter != null) { ComponentCollection filteredComponents = filter.FilterComponents(components); Debug.Assert(filteredComponents != null, "Incorrect ContainerFilterService implementation."); if (filteredComponents != null) { components = filteredComponents; } } return components; } } } // Removes a component from the container. ////// Gets all the components in the ////// . /// /// public virtual void Remove(IComponent component) { Remove(component, false); } private void Remove(IComponent component, bool preserveSite) { lock (syncObj) { if (component == null) return; ISite site = component.Site; if (site == null || site.Container != this) return; if (!preserveSite) component.Site = null; for (int i = 0; i < siteCount; i++) { if (sites[i] == site) { siteCount--; Array.Copy(sites, i + 1, sites, i, siteCount - i); sites[siteCount] = null; components = null; break; } } } } protected void RemoveWithoutUnsiting(IComponent component) { Remove(component, true); } ////// Removes a component from the ////// . /// /// Validates that the given name is valid for a component. The default implementation /// verifies that name is either null or unique compared to the names of other /// components in the container. /// protected virtual void ValidateName(IComponent component, string name) { if (component == null) { throw new ArgumentNullException("component"); } if (name != null) { for (int i = 0; i < Math.Min(siteCount,sites.Length); i++) { ISite s = sites[ i ]; if (s != null && s.Name != null && string.Equals(s.Name, name, StringComparison.OrdinalIgnoreCase) && s.Component != component) { InheritanceAttribute inheritanceAttribute = (InheritanceAttribute)TypeDescriptor.GetAttributes(s.Component)[typeof(InheritanceAttribute)]; if(inheritanceAttribute.InheritanceLevel != InheritanceLevel.InheritedReadOnly) { throw new ArgumentException(SR.GetString(SR.DuplicateComponentName, name)); } } } } } private class Site : ISite { private IComponent component; private Container container; private String name; internal Site(IComponent component, Container container, String name) { this.component = component; this.container = container; this.name = name; } // The component sited by this component site. public IComponent Component { get { return component; } } // The container in which the component is sited. public IContainer Container { get { return container; } } public Object GetService(Type service) { return((service == typeof(ISite)) ? this : container.GetService(service)); } // Indicates whether the component is in design mode. public bool DesignMode { get { return false; } } // The name of the component. // public String Name { get { return name;} set { if (value == null || name == null || !value.Equals(name)) { // container.ValidateName(component, value); name = value; } } } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SecureConversationVersion.cs
- SessionParameter.cs
- SafeFileHandle.cs
- TemplateBindingExpression.cs
- Graph.cs
- LayoutEngine.cs
- BaseTreeIterator.cs
- AssociationSetMetadata.cs
- ContextMarshalException.cs
- ControlCollection.cs
- StringUtil.cs
- AuthenticationService.cs
- CachedFontFace.cs
- VirtualizedItemPattern.cs
- SocketElement.cs
- BCLDebug.cs
- GridViewAutoFormat.cs
- ConsoleEntryPoint.cs
- SQLByte.cs
- WindowsScrollBar.cs
- SortKey.cs
- DateTimeStorage.cs
- CodeChecksumPragma.cs
- LinqToSqlWrapper.cs
- XmlCodeExporter.cs
- ActivityBuilder.cs
- DBAsyncResult.cs
- Socket.cs
- HtmlElement.cs
- ContractType.cs
- DataGridDetailsPresenter.cs
- manifestimages.cs
- System.Data_BID.cs
- XmlDocument.cs
- RuntimeHandles.cs
- Visual3D.cs
- SystemKeyConverter.cs
- X509WindowsSecurityToken.cs
- LayoutTable.cs
- TypeUnloadedException.cs
- GridViewCellAutomationPeer.cs
- ColorDialog.cs
- CompositeControl.cs
- _IPv4Address.cs
- TableLayout.cs
- OdbcUtils.cs
- XmlSortKeyAccumulator.cs
- KeyConverter.cs
- DataIdProcessor.cs
- RecordsAffectedEventArgs.cs
- XmlHelper.cs
- ResXResourceReader.cs
- ReadOnlyDataSourceView.cs
- DataTableMappingCollection.cs
- XmlSchemaSimpleTypeList.cs
- PKCS1MaskGenerationMethod.cs
- String.cs
- GroupItem.cs
- DriveInfo.cs
- URI.cs
- DataStorage.cs
- GeneralTransform3DGroup.cs
- LinearKeyFrames.cs
- XmlChildEnumerator.cs
- XamlWriter.cs
- OperatorExpressions.cs
- XmlAttributeAttribute.cs
- SessionPageStatePersister.cs
- SqlProfileProvider.cs
- NavigationPropertyEmitter.cs
- CodeTypeDeclarationCollection.cs
- DesignSurface.cs
- XmlDataLoader.cs
- CatalogZone.cs
- HashHelper.cs
- ColorPalette.cs
- ProfileSettings.cs
- ColorConvertedBitmap.cs
- DesignerVerbToolStripMenuItem.cs
- RelationshipDetailsRow.cs
- GraphicsPathIterator.cs
- StateWorkerRequest.cs
- RSAOAEPKeyExchangeFormatter.cs
- DetailsViewCommandEventArgs.cs
- StorageTypeMapping.cs
- GPPOINTF.cs
- DispatcherProcessingDisabled.cs
- GridErrorDlg.cs
- StateManagedCollection.cs
- ToolStripOverflow.cs
- DataGridViewCellErrorTextNeededEventArgs.cs
- XmlAttributeOverrides.cs
- HttpModuleCollection.cs
- WpfKnownTypeInvoker.cs
- RoutedEventHandlerInfo.cs
- ObjectDataSourceView.cs
- DataServiceQueryContinuation.cs
- DataGridViewCellStateChangedEventArgs.cs
- ColumnMap.cs
- DrawToolTipEventArgs.cs