사용 규칙
사용 규칙은 .NET의 적절한 사용을 지원합니다.
이 섹션의 내용
규칙 | 설명 |
---|---|
CA1801: 사용되지 않은 매개 변수를 검토하십시오. | 메서드 시그니처에 메서드 본문에서 사용되지 않는 매개 변수가 있습니다. |
CA1816: GC.SuppressFinalize를 올바르게 호출하십시오. | Dispose 구현인 메서드가 GC.SuppressFinalize 를 호출하지 않거나, Dispose 구현이 아닌 메서드가 GC.SuppressFinalize 를 호출하거나, 메서드가 GC.SuppressFinalize 를 호출하고 this (Visual Basic의 경우 Me ) 이외의 값을 전달합니다. |
CA2200: 스택 정보를 유지하도록 다시 throw하십시오. | 예외가 다시 throw되며 예외가 throw 문에 명시적으로 지정되어 있습니다. throw 문에 예외를 지정하여 예외가 다시 throw되면 예외를 throw한 원래 메서드와 현재 메서드 간의 메서드 호출 목록이 손실됩니다. |
CA2201: 예약된 예외 형식을 발생시키지 마십시오. | 이로 인해 원래 오류를 탐지 및 디버그하기 어려워집니다. |
CA2207: 값 형식 정적 필드를 인라인으로 초기화하십시오. | 값 형식에서 명시적인 정적 생성자를 선언합니다. 이 규칙 위반 문제를 해결하려면 모든 정적 데이터를 선언할 때 초기화하고 정적 생성자를 제거합니다. |
CA2208: 인수 예외를 올바르게 인스턴스화하십시오. | ArgumentException 또는 ArgumentException에서 파생된 예외 형식의 기본(매개 변수가 없는) 생성자를 호출했거나, ArgumentException 또는 ArgumentException에서 파생된 예외 형식의 매개 변수가 있는 생성자에 잘못된 문자열 인수가 전달되었습니다. |
CA2211: 비상수 필드는 노출되면 안 됩니다. | 상수 또는 읽기 전용이 아닌 정적 필드는 스레드로부터 안전하지 않습니다. 해당 필드에 대한 액세스는 신중하게 제어해야 하며 클래스 개체에 대한 액세스를 동기화하는 고급 프로그래밍 기술을 필요로 합니다. |
CA2213: 삭제 가능한 필드는 삭제해야 합니다. | System.IDisposable을 구현하는 형식은 IDisposable 을 구현하는 형식의 필드를 선언합니다. 필드의 Dispose 메서드가 선언 형식의 Dispose 메서드에 의해 호출되지 않습니다. |
CA2214: 재정의 가능한 메서드를 생성자에서 호출하지 마십시오. | 생성자가 가상 메서드를 호출할 때 해당 메서드를 호출하는 인스턴스의 생성자가 실행되지 않았을 수 있습니다. |
CA2215: Dispose 메서드는 기본 클래스 Dispose를 호출해야 합니다. | 형식이 삭제 가능한 형식에서 상속되면 해당 형식은 자체 Dispose 메서드에서 기본 형식의 Dispose 메서드를 호출해야 합니다. |
CA2216: 삭제 가능한 형식은 종료자를 선언해야 합니다. | System.IDisposable을 구현하며 관리되지 않는 리소스를 사용하도록 제안하는 필드가 있는 형식은 Object.Finalize 에 설명된 대로 종료자를 구현하지 않습니다. |
CA2217: 열거형을 FlagsAttribute로 표시하지 마십시오. | 외부에 표시되는 열거형은 FlagsAttribute 를 사용하여 표시되며 2의 거듭제곱 또는 열거형에서 정의된 다른 값의 조합이 아닌 하나 이상의 값을 가집니다. |
CA2218: Equals를 재정의할 때 GetHashCode를 재정의하십시오. | 퍼블릭 형식은 System.Object.Equals를 재정의하지만 System.Object.GetHashCode를 재정의하지 않습니다. |
CA2219: exception 절에서 예외를 발생시키지 마십시오. | finally 또는 fault 절에서 예외가 발생하는 경우 새 예외가 활성 예외를 숨깁니다. 필터 절에서 예외가 발생하면 런타임에서 자동으로 예외를 catch합니다. 이로 인해 원래 오류를 탐지 및 디버그하기 어려워집니다. |
CA2224: 같음 연산자를 오버로드할 때 Equals를 재정의하십시오. | 퍼블릭 형식은 같음 연산자를 구현하지만 System.Object.Equals를 재정의하지 않습니다. |
CA2225: 연산자 오버로드에는 명명된 대체 항목이 있습니다. | 연산자 오버로드가 감지되었으며 예상되는 이름의 대체 메서드를 찾을 수 없습니다. 명명된 대체 멤버는 연산자와 동일한 기능에 대한 액세스를 제공하며 해당 멤버는 오버로드된 연산자를 지원하지 않는 언어로 프로그래밍하는 개발자에게 제공됩니다. |
CA2226: 연산자에는 대칭 오버로드가 있어야 합니다. | 형식은 같음 또는 같지 않음 연산자를 구현하지만 반대 연산자는 구현하지 않습니다. |
CA2227: 컬렉션 속성은 읽기 전용이어야 합니다. | 쓰기 가능한 컬렉션 속성을 통해 사용자는 컬렉션을 다른 컬렉션으로 바꿀 수 있습니다. 읽기 전용 속성은 컬렉션을 바꾸지 못하도록 하지만 개별 멤버를 설정하는 것은 여전히 가능합니다. |
CA2229: serialization 생성자를 구현하십시오. | 이 규칙 위반 문제를 해결하려면 serialization 생성자를 구현합니다. 봉인 클래스의 경우에는 생성자를 private으로 만들고, 그 밖의 경우에는 protected로 만듭니다. |
CA2231: ValueType.Equals를 재정의할 때 같음 연산자를 오버로드하십시오. | 값 형식은 Object.Equals 를 재정의하지만 같음 연산자를 구현하지 않습니다. |
CA2234: 문자열 대신 System.Uri 개체를 전달하십시오. | 이름에 "uri", "URI", "urn", "URN", "url" 또는 "URL"이 포함된 문자열 매개 변수가 있는 메서드가 호출되었습니다. 메서드의 선언 형식에는 System.Uri 매개 변수를 포함하는 해당 메서드 오버로드가 들어 있습니다. |
CA2235: 모두 serialize할 수 없는 필드로 표시하십시오. | serialize할 수 없는 형식의 인스턴스 필드가 serialize할 수 있는 형식에 정의되었습니다. |
CA2237: ISerializable 형식을 SerializableAttribute로 표시하십시오. | 공용 언어 런타임에서 직렬화가 가능하다고 인식되려면 형식이 ISerializable 인터페이스 구현을 통해 사용자 지정 serialization 루틴을 사용하는 경우에도 SerializableAttribute 특성을 사용하여 형식을 표시해야 합니다. |
CA2241: 형식 메서드에 올바른 인수를 제공하십시오. | String.Format으로 전달된 format 인수에 각 개체 인수에 해당하는 format 항목이 포함되지 않으며 그 반대의 경우도 마찬가지입니다. |
CA2242: NaN에 대해 정확하게 테스트하십시오. | 이 식은 Single.Nan 또는 Double.Nan 에 대해 값을 테스트합니다. Single.IsNan(Single) 또는 Double.IsNan(Double) 을 사용하여 값을 테스트합니다. |
CA2243: 특성 문자열 리터럴이 올바르게 구문 분석되어야 합니다. | 특성의 문자열 리터럴 매개 변수가 URL, GUID 또는 버전에 대해 구문을 올바르게 분석하지 않습니다. |
CA2244: 인덱싱된 요소 초기화를 중복하지 마세요. | 개체 이니셜라이저에 동일한 상수 인덱스를 포함하는 두 개 이상의 인덱싱된 요소 이니셜라이저가 있습니다. 마지막 이니셜라이저 외에 모두 중복됩니다. |
CA2245: 자체에 속성을 할당하지 마세요. | 속성이 실수로 속성 자체에 할당받았습니다. |
CA2246: 동일한 문에 기호와 해당 멤버를 할당하지 마세요. | 동일한 문에서는 기호 및 해당 멤버(필드 또는 속성)를 할당하지 않는 것이 좋습니다. 멤버 액세스가 할당 전 기호의 이전 값을 사용하거나 해당 문에 있는 할당의 새 값을 사용해야 했는지 분명하지 않습니다. |
CA2247: TaskCompletionSource 생성자에 전달된 인수는 TaskContinuationOptions 열거형 대신 TaskCreationOptions 열거형이어야 합니다. | TaskCompletionSource에는 기본 작업을 제어하는 TaskCreationOptions를 사용하는 생성자와 작업에 저장된 개체 상태를 사용하는 생성자가 포함됩니다. 실수로 TaskCreationOptions 대신 TaskContinuationOptions를 전달하면 호출이 옵션을 상태로 처리합니다. |
CA2248: ‘Enum.HasFlag’에 올바른 ‘enum’ 인수를 제공하세요 | HasFlag 메서드 호출에 인수로 전달된 열거형 형식이 호출하는 열거형 형식과 다릅니다. |
CA2249: String.IndexOf 대신 String.Contains를 사용하는 것이 좋습니다. | 결과가 하위 문자열의 존재 여부를 확인하는 데 사용되는 string.IndexOf 호출은 string.Contains 로 바꿀 수 있습니다. |
CA2250: ThrowIfCancellationRequested 사용 |
ThrowIfCancellationRequested 는 토큰이 취소되었는지 여부를 자동으로 확인하고, 취소된 경우 OperationCanceledException 을 throw합니다. |
CA2251: String.Compare 대신 String.Equals 사용 |
String.Compare 의 결과를 0과 비교하는 대신 String.Equals 를 사용하는 것이 보다 명확하고 빠릅니다. |
CA2252: 미리 보기 기능 옵트인 | 미리 보기 API를 사용하기 전에 미리 보기 기능을 옵트인합니다. |
CA2253: 명명된 자리 표시자는 숫자 값이 아니어야 합니다. | 로깅 메시지 템플릿의 명명된 자리 표시자는 숫자 문자로만 구성해서는 안 됩니다. |
CA2254: 템플릿은 정적 식이어야 합니다. | 로깅 메시지 템플릿은 호출마다 달라서는 안 됩니다. |
CA2255: ModuleInitializer 특성을 라이브러리에서 사용해서는 안 됩니다. |
모듈 이니셜라이저는 애플리케이션 코드가 실행되기 전에 애플리케이션의 구성 요소가 초기화되도록 하기 위해 애플리케이션 코드에서 사용됩니다. |
CA2256: 부모 인터페이스에 선언된 모든 멤버는 DynamicInterfaceCastableImplementation 특성 인터페이스에 구현이 있어야 합니다. | 형식을 구현하는 DynamicInterfaceCastableImplementationAttribute 형식에 대한 인터페이스 구현으로 작동하는 특성이 있는 형식입니다 IDynamicInterfaceCastable . 따라서 구현하는 형식이 그렇지 않으면 제공하지 않으므로 상속된 인터페이스에 정의된 모든 멤버의 구현을 IDynamicInterfaceCastable 제공해야 합니다. |
CA2257: 'DynamicInterfaceCastableImplementationAttribute'가 있는 인터페이스에 정의된 멤버는 'static'이어야 합니다. | 구현 IDynamicInterfaceCastable 하는 형식은 메타데이터에서 동적 인터페이스를 구현하지 않을 수 있으므로 이 형식에 정의된 명시적 구현이 아닌 인스턴스 인터페이스 멤버에 대한 호출은 런타임에 실패할 수 있습니다. 런타임 오류를 방지하려면 새 인터페이스 멤버 static 를 표시합니다. |
CA2258: Visual Basic에서 'DynamicInterfaceCastableImplementation' 인터페이스를 제공하는 것은 지원되지 않습니다. | 기능 DynamicInterfaceCastableImplementationAttribute 특성 인터페이스를 제공하려면 Visual Basic에서 지원되지 않는 기본 인터페이스 멤버 기능이 필요합니다. |
CA2259: ThreadStatic 이 정적 필드에만 사용되는지 확인 |
ThreadStaticAttribute는 (Shared Visual Basic에서) 필드에만 영향을 줍니다 static . 인스턴스 필드에 적용된 특성은 동작에 영향을 주지 않습니다. |
CA2260: 제네릭 수학 인터페이스를 올바르게 구현 | 제네릭 수학 인터페이스를 사용하려면 파생 형식 자체를 자체 되풀이 형식 매개 변수에 사용해야 합니다. |
CA2261: ConfigureAwaitOptions.SuppressThrowing 를 Task<TResult> 와 함께 사용하지 마세요. |
이 ConfigureAwaitOptions.SuppressThrowing 옵션은 제네릭 Task<TResult> 에서 지원되지 않습니다. 이 경우 잘못된 TResult 옵션이 반환될 수 있기 때문에 지원되지 않습니다. |
CA2262: 제대로 설정 MaxResponseHeadersLength |
값이 MaxResponseHeadersLength 올바르게 제공되었는지 확인합니다. 이 값은 킬로바이트 단위로 측정됩니다. |
CA2264: null을 허용하지 않는 값을 'ArgumentNullException.ThrowIfNull'에 전달하지 마세요. | 전달된 인수가 'null'이면 'ArgumentNullException.ThrowIfNull'이 throw됩니다. null을 허용하지 않는 구조체와 'nameof()' 및 'new' 식과 같은 특정 구문은 null이 아닌 것으로 알려져 있으므로 'ArgumentNullException.ThrowIfNull'은 throw되지 않습니다. |
CA2265: 비교하거나 비교 Span<T> 하지 마세요.null default |
범위를 null 의도한 것과 비교하거나 default 수행하지 않을 수 있습니다. default 리터럴은 null 암시적으로 .로 Span<T>.Empty 변환됩니다. |
CA2263: 형식이 알려진 경우 제네릭 오버로드를 선호함 | 제네릭 오버로드를 사용하는 것은 향상된 컴파일 시간 검사를 통해 보다 명확하고 형식이 안전한 코드를 승격하기 때문에 형식이 알려지면 인수를 전달하는 System.Type 것이 좋습니다. |
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET