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
- EntityClientCacheEntry.cs
- RSAOAEPKeyExchangeDeformatter.cs
- PerformanceCounterPermissionAttribute.cs
- SqlDataSourceCommandEventArgs.cs
- AutoSizeToolBoxItem.cs
- TakeOrSkipWhileQueryOperator.cs
- BamlLocalizer.cs
- UniqueIdentifierService.cs
- basevalidator.cs
- ObjectItemAttributeAssemblyLoader.cs
- DiscreteKeyFrames.cs
- DynamicMethod.cs
- ExceptionHandlersDesigner.cs
- GeneratedContractType.cs
- PageBuildProvider.cs
- ValidateNames.cs
- LinkedDataMemberFieldEditor.cs
- TransformConverter.cs
- TextFormatterImp.cs
- DataProviderNameConverter.cs
- Permission.cs
- PageCodeDomTreeGenerator.cs
- XsltOutput.cs
- ServerTooBusyException.cs
- AttributeConverter.cs
- DataPager.cs
- View.cs
- ManagementBaseObject.cs
- SmiGettersStream.cs
- DataControlPagerLinkButton.cs
- StringUtil.cs
- LocatorPart.cs
- SqlServices.cs
- ProcessHostMapPath.cs
- DataGridToolTip.cs
- SerialErrors.cs
- AmbientLight.cs
- FixedBufferAttribute.cs
- PtsContext.cs
- ScrollBarAutomationPeer.cs
- HitTestWithPointDrawingContextWalker.cs
- WebDisplayNameAttribute.cs
- SecurityState.cs
- InstancePersistenceEvent.cs
- MenuItem.cs
- _HTTPDateParse.cs
- DeploymentSection.cs
- SchemaCollectionCompiler.cs
- FileLogRecord.cs
- DoubleCollectionConverter.cs
- xml.cs
- VisemeEventArgs.cs
- xdrvalidator.cs
- CollectionType.cs
- TrackingProfileCache.cs
- DataPager.cs
- FileLevelControlBuilderAttribute.cs
- PropertyBuilder.cs
- HtmlForm.cs
- SqlRecordBuffer.cs
- SchemaImporterExtensionElement.cs
- ButtonBaseAutomationPeer.cs
- AutomationEvent.cs
- WizardStepBase.cs
- Error.cs
- AccessDataSource.cs
- ComponentRenameEvent.cs
- StylusCollection.cs
- KernelTypeValidation.cs
- GeometryDrawing.cs
- Int64Storage.cs
- XDeferredAxisSource.cs
- DataGridViewComboBoxColumn.cs
- XmlNamespaceManager.cs
- DataGridViewAutoSizeColumnModeEventArgs.cs
- NullNotAllowedCollection.cs
- DeviceOverridableAttribute.cs
- Margins.cs
- BlurBitmapEffect.cs
- ApplicationHost.cs
- StaticSiteMapProvider.cs
- ClientScriptManagerWrapper.cs
- SqlCharStream.cs
- CorrelationTokenInvalidatedHandler.cs
- XmlAttributes.cs
- ConfigurationValue.cs
- Int32KeyFrameCollection.cs
- OutputScope.cs
- StoragePropertyMapping.cs
- XmlSchemaCollection.cs
- EpmContentSerializer.cs
- MimeBasePart.cs
- CompiledQuery.cs
- EnumCodeDomSerializer.cs
- DictionaryBase.cs
- SystemIPInterfaceStatistics.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- ConnectionProviderAttribute.cs
- MarkupExtensionReturnTypeAttribute.cs
- ViewSimplifier.cs