Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / Tools / System.Activities.Presentation / System / Activities / Presentation / Base / Core / Internal / Metadata / AttributeData.cs / 1305376 / AttributeData.cs
//---------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------- namespace System.Activities.Presentation.Internal.Metadata { using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; using System.Runtime; // This class groups Attribute with its AttributeUsageAttributes that we care about. // Basically, each Attribute has characteristics that are useful to know about, // such as whether it can be inherited and whether there can be more than // one instance of that attribute extending whatever it is the attribute // is extending (class, method, property, or event). Those characteristics // are stored as attributes themselves and, as such, are costly to retrieve. // This class retrieves that information exactly once, on demand, and caches it for // further use. internal class AttributeData { private Type _attributeType; private bool? _isInheritable; private bool? _allowsMultiple; //// Creates an AttributeData wrapper around Attribute type to expose its // Inherit and AllowMultiple characteristics // // Attribute type to wrap around internal AttributeData(Type attributeType) { Fx.Assert(attributeType != null, "attributeType parameter should not be null"); _attributeType = attributeType; } //// Gets the contained attribute type // internal Type AttributeType { get { return _attributeType; } } //// Gets the AllowMultiple characteristic of the // contained attribute and caches the result for subsequent // calls to this property. // internal bool AllowsMultiple { get { if (_allowsMultiple == null) { ParseUsageAttributes(); } return (bool)_allowsMultiple; } } //// Gets the Inherit characteristic of the // contained attribute and caches the result for subsequent // calls to this property. // internal bool IsInheritable { get { if (_isInheritable == null) { ParseUsageAttributes(); } return (bool)_isInheritable; } } private void ParseUsageAttributes() { _isInheritable = false; _allowsMultiple = false; object[] usageAttributes = _attributeType.GetCustomAttributes(typeof(AttributeUsageAttribute), true); if (usageAttributes != null && usageAttributes.Length > 0) { for (int i = 0; i < usageAttributes.Length; i++) { Fx.Assert(usageAttributes[i] is AttributeUsageAttribute, "usageAttributes should be of type AttributeUsageAttribute"); AttributeUsageAttribute usageAttribute = (AttributeUsageAttribute)usageAttributes[i]; _isInheritable = usageAttribute.Inherited; _allowsMultiple = usageAttribute.AllowMultiple; } } } } } // 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
- LabelDesigner.cs
- Vector3DCollectionConverter.cs
- Span.cs
- Compiler.cs
- PieceNameHelper.cs
- TextFormatterContext.cs
- AppDomainFactory.cs
- Automation.cs
- LogReserveAndAppendState.cs
- PageAdapter.cs
- ClassHandlersStore.cs
- ContentOperations.cs
- JpegBitmapEncoder.cs
- Module.cs
- WindowsAuthenticationModule.cs
- PackageDocument.cs
- DataGridViewRowsAddedEventArgs.cs
- TextDecorationLocationValidation.cs
- ZipIOExtraFieldPaddingElement.cs
- __ConsoleStream.cs
- DbConnectionOptions.cs
- LazyTextWriterCreator.cs
- InfoCardRSAPKCS1SignatureDeformatter.cs
- SubordinateTransaction.cs
- RadioButton.cs
- MobileControlBuilder.cs
- XmlObjectSerializerReadContextComplexJson.cs
- ObjectDataSource.cs
- XmlFormatExtensionPrefixAttribute.cs
- Parameter.cs
- DataGrid.cs
- FrameworkElement.cs
- TypeUnloadedException.cs
- ListBoxDesigner.cs
- PageRouteHandler.cs
- DropTarget.cs
- SystemMulticastIPAddressInformation.cs
- SizeConverter.cs
- PageVisual.cs
- ContainerFilterService.cs
- HierarchicalDataSourceIDConverter.cs
- EntityDataSourceWizardForm.cs
- ToolStripArrowRenderEventArgs.cs
- WaitHandle.cs
- RtfControls.cs
- HttpVersion.cs
- AccessorTable.cs
- HTMLTagNameToTypeMapper.cs
- RawAppCommandInputReport.cs
- odbcmetadatacollectionnames.cs
- WeakReference.cs
- StorageMappingItemLoader.cs
- UserPreferenceChangedEventArgs.cs
- TouchPoint.cs
- UdpSocket.cs
- Propagator.cs
- PolyQuadraticBezierSegment.cs
- NaturalLanguageHyphenator.cs
- XmlAttributeProperties.cs
- Scheduler.cs
- Pair.cs
- InkSerializer.cs
- QueryRewriter.cs
- ToggleProviderWrapper.cs
- RadioButton.cs
- XmlNamespaceMapping.cs
- EventDescriptor.cs
- TCEAdapterGenerator.cs
- SelectionProcessor.cs
- CaseStatement.cs
- SpecularMaterial.cs
- BidOverLoads.cs
- Storyboard.cs
- ImageSourceConverter.cs
- SQLBoolean.cs
- Inline.cs
- PrintPreviewDialog.cs
- RuntimeArgumentHandle.cs
- RuleRefElement.cs
- XamlPoint3DCollectionSerializer.cs
- AdCreatedEventArgs.cs
- UpdateProgress.cs
- Accessible.cs
- SystemInfo.cs
- DesignTimeResourceProviderFactoryAttribute.cs
- WebHttpElement.cs
- ListBox.cs
- PartialArray.cs
- NativeActivityTransactionContext.cs
- PageRequestManager.cs
- GridViewColumnCollectionChangedEventArgs.cs
- iisPickupDirectory.cs
- DropDownButton.cs
- HtmlHistory.cs
- CLSCompliantAttribute.cs
- DynamicObject.cs
- DmlSqlGenerator.cs
- baseaxisquery.cs
- ComboBoxDesigner.cs
- SyndicationLink.cs