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
- Fault.cs
- ConfigurationProperty.cs
- FormatControl.cs
- HebrewNumber.cs
- WorkflowView.cs
- AstTree.cs
- CreateUserWizard.cs
- MetafileHeaderWmf.cs
- IpcPort.cs
- PingOptions.cs
- XmlTextWriter.cs
- BaseComponentEditor.cs
- DispatcherExceptionFilterEventArgs.cs
- LoadedOrUnloadedOperation.cs
- DropTarget.cs
- HttpPostedFile.cs
- safePerfProviderHandle.cs
- ConfigurationValidatorAttribute.cs
- UserPersonalizationStateInfo.cs
- WebEventTraceProvider.cs
- PartitionResolver.cs
- Compilation.cs
- ApplyTemplatesAction.cs
- DataGridViewRowConverter.cs
- SettingsAttributeDictionary.cs
- XmlSchemaCollection.cs
- ZipPackagePart.cs
- Boolean.cs
- ConfigurationManagerInternalFactory.cs
- RelationshipType.cs
- SignatureResourcePool.cs
- AutomationPatternInfo.cs
- Encoder.cs
- EntityDataSourceDataSelection.cs
- ProfileBuildProvider.cs
- NamedElement.cs
- IInstanceTable.cs
- RoutedEventArgs.cs
- ProfessionalColors.cs
- ContextMarshalException.cs
- TranslateTransform3D.cs
- SoapDocumentMethodAttribute.cs
- BuildProviderUtils.cs
- TextEndOfParagraph.cs
- PropertyChangingEventArgs.cs
- SiteMapDataSourceView.cs
- InvalidPrinterException.cs
- TextTreeNode.cs
- InputLangChangeRequestEvent.cs
- ProjectionQueryOptionExpression.cs
- SpecialNameAttribute.cs
- FileDataSourceCache.cs
- ImageClickEventArgs.cs
- Style.cs
- ArrangedElement.cs
- TextTreeUndoUnit.cs
- StrokeNodeOperations2.cs
- Light.cs
- SafeWaitHandle.cs
- DocobjHost.cs
- WebPartConnectionsConfigureVerb.cs
- ActionFrame.cs
- TypeExtension.cs
- StoreContentChangedEventArgs.cs
- MobileListItem.cs
- IFormattable.cs
- FixedSOMTableCell.cs
- PerspectiveCamera.cs
- TimestampInformation.cs
- AccessedThroughPropertyAttribute.cs
- DataSetMappper.cs
- TypefaceMap.cs
- ValidatedControlConverter.cs
- AutoGeneratedField.cs
- DragAssistanceManager.cs
- TargetException.cs
- ProfessionalColorTable.cs
- DataGridViewImageCell.cs
- HwndPanningFeedback.cs
- WinEventQueueItem.cs
- SiteMapHierarchicalDataSourceView.cs
- FlowLayoutPanel.cs
- PatternMatcher.cs
- DataControlCommands.cs
- EncoderBestFitFallback.cs
- AnnotationHelper.cs
- ParsedAttributeCollection.cs
- NegotiateStream.cs
- XsltSettings.cs
- InspectionWorker.cs
- PropertyGrid.cs
- DefaultBinder.cs
- CodeConstructor.cs
- XPathItem.cs
- ContentElement.cs
- CheckBoxFlatAdapter.cs
- GridViewDeletedEventArgs.cs
- Transform.cs
- NativeMethods.cs
- TransformCollection.cs