다음을 통해 공유


CA1813: 봉인되지 않은 특성을 사용하지 마십시오.

TypeName

AvoidUnsealedAttributes

CheckId

CA1813

범주

Microsoft.Performance

변경 수준

주요 변경

원인

System.Attribute에서 상속 받은 public 형식이 abstract도 아니고 sealed(Visual Basic에서는 NotInheritable)도 아닙니다.

규칙 설명

.NET Framework 클래스 라이브러리는 사용자 지정 특성을 검색하는 메서드를 제공합니다. 기본적으로 이러한 메서드는 특성 상속 계층 구조를 검색합니다. 예를 들어, Attribute.GetCustomAttribute는 지정된 특성 형식 또는 지정된 특성 형식을 확장하는 모든 특성 형식을 검색합니다. 특성을 봉인하면 상속 계층 구조를 검색하지 않으므로 성능이 향상될 수 있습니다.

위반 문제를 해결하는 방법

이 규칙 위반 문제를 해결하려면 특성 형식을 봉인하거나 abstract로 만듭니다.

경고를 표시하지 않는 경우

이 규칙에서는 경고를 표시하지 않아도 안전합니다. 특성 계층 구조를 정의하면서 특성을 봉인하거나 abstract로 만들 수 없을 경우에만 경고를 제외해야 합니다.

예제

다음 예제에서는 이 규칙을 만족하는 사용자 지정 특성을 보여 줍니다.

Imports System

Namespace PerformanceLibrary

' Satisfies rule: AvoidUnsealedAttributes.
<AttributeUsage(AttributeTargets.Class Or AttributeTargets.Struct)>  _
NotInheritable Public Class DeveloperAttribute
    Inherits Attribute
    Private nameValue As String

    Public Sub New(name As String)
        nameValue = name
    End Sub


    Public ReadOnly Property Name() As String
        Get
            Return nameValue
        End Get
    End Property
End Class 

End Namespace
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: 특성 인수의 접근자를 정의하십시오.

CA1018: 특성을 AttributeUsageAttribute로 표시하십시오.

참고 항목

참조

특성 사용 지침