CA1813: Avoid unsealed attributes

 

For the latest documentation on Visual Studio 2017, see Visual Studio 2017 Documentation.

For the latest documentation on Visual Studio 2017, see CA1813: Avoid unsealed attributes on docs.microsoft.com.

TypeNameAvoidUnsealedAttributes
CheckIdCA1813
CategoryMicrosoft.Performance
Breaking ChangeBreaking

A public type inherits from System.Attribute, is not abstract, and is not sealed (NotInheritable in Visual Basic).

The .NET Framework class library provides methods for retrieving custom attributes. By default, these methods search the attribute inheritance hierarchy; for example Attribute.GetCustomAttribute searches for the specified attribute type, or any attribute type that extends the specified attribute type. Sealing the attribute eliminates the search through the inheritance hierarchy, and can improve performance.

To fix a violation of this rule, seal the attribute type or make it abstract.

It is safe to suppress a warning from this rule. You should do this only if you are defining an attribute hierarchy and cannot seal the attribute or make it abstract.

The following example shows a custom attribute that satisfies this rule.

using System;

namespace PerformanceLibrary 
{
    // Satisfies rule: AvoidUnsealedAttributes.

    [AttributeUsage(AttributeTargets.Class|AttributeTargets.Struct)]
    public sealed class DeveloperAttribute: Attribute
    {
        private string nameValue;
        public DeveloperAttribute(string name) 
        { 
            nameValue = name; 
        }
        
        public string Name
        {
            get 
            {
                return nameValue;
            }
        }
    }

}

CA1019: Define accessors for attribute arguments

CA1018: Mark attributes with AttributeUsageAttribute

Attributes

Show: