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
- ColumnTypeConverter.cs
- WebRequestModulesSection.cs
- Brush.cs
- MethodRental.cs
- WmfPlaceableFileHeader.cs
- CacheAxisQuery.cs
- DataGridTable.cs
- Vector.cs
- StringConverter.cs
- DefaultParameterValueAttribute.cs
- DataControlFieldCell.cs
- PixelFormat.cs
- DispatcherHooks.cs
- CornerRadiusConverter.cs
- KernelTypeValidation.cs
- sapiproxy.cs
- Tuple.cs
- util.cs
- MenuRendererClassic.cs
- ByteConverter.cs
- ThreadInterruptedException.cs
- RenderDataDrawingContext.cs
- SocketStream.cs
- ToolStripOverflow.cs
- cryptoapiTransform.cs
- ForwardPositionQuery.cs
- InvalidCommandTreeException.cs
- TraceSwitch.cs
- Italic.cs
- ToolStripProfessionalLowResolutionRenderer.cs
- Util.cs
- DataGridViewCellEventArgs.cs
- ResourcePermissionBase.cs
- Triplet.cs
- PagesChangedEventArgs.cs
- Literal.cs
- GlyphsSerializer.cs
- SqlUserDefinedAggregateAttribute.cs
- InstalledFontCollection.cs
- GPRECT.cs
- SqlMetaData.cs
- TouchDevice.cs
- DBProviderConfigurationHandler.cs
- ErrorHandler.cs
- MatrixValueSerializer.cs
- HideDisabledControlAdapter.cs
- LinkedResourceCollection.cs
- WmlLinkAdapter.cs
- CustomAttributeSerializer.cs
- ArraySegment.cs
- HtmlInputControl.cs
- StructuredTypeEmitter.cs
- PermissionSetEnumerator.cs
- XmlAnyAttributeAttribute.cs
- ManagementClass.cs
- Window.cs
- PlainXmlWriter.cs
- FeatureSupport.cs
- ConnectionProviderAttribute.cs
- RewritingProcessor.cs
- WindowsTooltip.cs
- DataPagerFieldCommandEventArgs.cs
- RouteData.cs
- RadioButtonFlatAdapter.cs
- PipelineModuleStepContainer.cs
- RenderCapability.cs
- Color.cs
- ColorAnimation.cs
- OutputCacheSection.cs
- ProxyElement.cs
- FunctionCommandText.cs
- EventProviderClassic.cs
- DesignerVerbCollection.cs
- OleDbTransaction.cs
- SpecularMaterial.cs
- ControlDesignerState.cs
- ScriptReferenceEventArgs.cs
- WhitespaceRuleReader.cs
- ConstructorBuilder.cs
- LoginUtil.cs
- NativeRightsManagementAPIsStructures.cs
- DesigntimeLicenseContext.cs
- Point4D.cs
- ProjectedSlot.cs
- ImageBrush.cs
- SafeRightsManagementEnvironmentHandle.cs
- XmlConvert.cs
- NativeMethods.cs
- ProcessHost.cs
- SvcFileManager.cs
- CollectionChangedEventManager.cs
- ReflectionTypeLoadException.cs
- SqlParameterCollection.cs
- ObjectPersistData.cs
- JsonSerializer.cs
- SimpleTypeResolver.cs
- DeadLetterQueue.cs
- PackWebRequest.cs
- MultiPropertyDescriptorGridEntry.cs
- TTSEngineProxy.cs