디자인 규칙
디자인 규칙은 .NET Framework 디자인 지침준수를 지원합니다.
이 섹션에서는
규칙 | 묘사 |
---|---|
CA1000: 제네릭 형식 정적 멤버를 선언하지 마세요. | 제네릭 형식의 정적 멤버를 호출하는 경우 형식에 대해 형식 인수를 지정해야 합니다. 유추를 지원하지 않는 제네릭 인스턴스 멤버가 호출되면 멤버에 대해 형식 인수를 지정해야 합니다. 이 두 경우에서 형식 인수를 지정하는 구문은 다르며 쉽게 혼동됩니다. |
CA1001: 처분할 수 있는 필드를 소유한 형식은 처분할 수 있도록 해야 합니다 | 클래스는 System.IDisposable 형식인 인스턴스 필드를 선언하고 구현하며 클래스는 IDisposable을 구현하지 않습니다. IDisposable 필드를 선언하는 클래스는 관리되지 않는 리소스를 간접적으로 소유하며 IDisposable 인터페이스를 구현해야 합니다. |
CA1002: 제네릭 목록 노출하지 마세요. | System.Collections.Generic.List<(<(T>)>)는 상속이 아닌 성능을 위해 설계된 제네릭 컬렉션입니다. 따라서 목록에는 가상 멤버가 포함되지 않습니다. 상속을 위해 설계된 제네릭 컬렉션은 대신 노출되어야 합니다. |
CA1003: 제네릭 이벤트 처리기 인스턴스 사용 | 형식에는 void를 반환하는 대리자를 포함하고 있으며, 이 대리자의 서명은 두 개의 매개 변수를 포함합니다. 첫 번째 매개 변수는 객체이고, 두 번째는 EventArgs에 할당할 수 있는 형식입니다. 포함된 어셈블리는 .NET Framework 2.0을 대상으로 합니다. |
CA1005: 제네릭 형식에 대한 과도한 매개 변수 방지 | 제네릭 형식에 포함된 형식 매개 변수가 많을수록 각 형식 매개 변수가 무엇을 나타내는지 알고 기억하기가 더 어려워집니다. 일반적으로 List<T>과 같이 하나의 형식 매개 변수를 사용할 때 명확하며, 사전<TKey, TValue>의 경우처럼 둘의 형식 매개 변수를 사용할 때도 특정 경우에 명확합니다. 그러나 두 개 이상의 형식 매개 변수가 있는 경우 대부분의 사용자에게는 어려움이 너무 커집니다. |
CA1008: 열거형은 0 값을 포함해야 한다 | 다른 값 형식과 마찬가지로 초기화되지 않은 열거형의 기본값은 0입니다. 특성이 없는 열거형은 기본값이 열거형의 유효한 값이 되도록 0 값을 사용하여 멤버를 정의해야 합니다. FlagsAttribute 특성이 적용된 열거형에서 값이 0인 멤버를 정의하는 경우 열거형에 값이 설정되지 않았음을 나타내려면 이름이 "None"이어야 합니다. |
CA1010: 컬렉션은 제네릭 인터페이스 구현해야 합니다. | 컬렉션의 유용성을 넓히려면 제네릭 컬렉션 인터페이스 중 하나를 구현합니다. 그런 다음 컬렉션을 사용하여 제네릭 컬렉션 형식을 채울 수 있습니다. |
CA1012: 추상 형식에는 공용 생성자가 없어야 | 추상 형식의 생성자는 파생 형식에서만 호출할 수 있습니다. 공용 생성자는 형식의 인스턴스를 만들고 추상 형식의 인스턴스를 만들 수 없으므로 공용 생성자가 있는 추상 형식이 잘못 디자인되었습니다. |
CA1014: CLSCompliantAttribute 사용하여 어셈블리 표시 | CLS(공용 언어 사양)는 어셈블리가 프로그래밍 언어에서 사용될 경우 준수해야 하는 명명 제한, 데이터 형식 및 규칙을 정의합니다. 좋은 디자인은 모든 어셈블리가 CLSCompliantAttribute를 사용하여 CLS 준수를 명시적으로 나타내는 것을 나타냅니다. 어셈블리에 이 특성이 없으면 어셈블리가 규격이 아닙니다. |
CA1016: 어셈블리를 AssemblyVersionAttribute로 표시하세요 | .NET에서는 버전 번호를 사용하여 어셈블리를 고유하게 식별하고 강력한 이름의 어셈블리의 형식에 바인딩합니다. 버전 번호는 버전 및 게시자 정책과 함께 사용됩니다. 기본적으로 애플리케이션은 빌드된 어셈블리 버전에서만 실행됩니다. |
CA1017: ComVisibleAttribute 사용하여 어셈블리 표시 | ComVisibleAttribute는 COM 클라이언트가 관리 코드에 액세스하는 방법을 결정합니다. 좋은 디자인의 원칙은 어셈블리가 COM 가시성을 명확하게 나타내야 한다는 것입니다. 전체 어셈블리에 대해 COM 가시성을 설정한 후 개별 형식 및 형식 멤버에 대해 재정의할 수 있습니다. 이 특성이 없으면 어셈블리의 내용이 COM 클라이언트에 표시됩니다. |
CA1018: AttributeUsageAttribute를 사용하여 특성 표시 | 사용자 지정 특성을 정의할 때 AttributeUsageAttribute를 사용하여 해당 특성을 표시하여 소스 코드에서 사용자 지정 특성을 적용할 수 있는 위치를 나타냅니다. 특성의 의미와 의도된 사용법은 코드에서 유효한 위치를 결정합니다. |
CA1019: 특성 인수 대한 접근자 정의 | 특성은 대상에 특성을 적용할 때 지정해야 하는 필수 인수를 정의할 수 있습니다. 이러한 인수는 위치 매개 변수로 특성 생성자에 제공되기 때문에 위치 인수라고도 합니다. 모든 필수 인수에 대해 이 특성은 실행 시 인수 값을 검색할 수 있도록 해당 읽기 전용 속성도 제공해야 합니다. 특성은 명명된 인수라고도 하는 선택적 인수를 정의할 수도 있습니다. 이러한 인수는 이름별로 특성 생성자에 제공되며 해당 읽기/쓰기 속성이 있어야 합니다. |
CA1021: 아웃 매개 변수 사용 방지 | 참조로 형식을 전달(out 또는 ref 사용)하려면 포인터를 사용하고, 값 형식과 참조 형식의 차이점을 이해하고, 여러 반환 값이 있는 메서드를 처리해야 합니다. 또한 out 매개 변수와 ref 매개 변수의 차이는 널리 이해되지 않습니다. |
CA1024: 적절한 속성을 사용합니다. | public 또는 protected 메서드는 "Get"으로 시작하고, 매개 변수를 사용하지 않으며, 배열이 아닌 값을 반환하는 이름을 가집니다. 이 메서드는 속성이 되기에 적합한 후보일 수 있습니다. |
CA1027: FlagsAttribute 사용하여 열거형 표시 | 열거형은 관련된 명명된 상수 집합을 정의하는 값 형식입니다. 명명된 상수가 의미 있는 결합될 수 있는 경우 열거형에 FlagsAttribute를 적용합니다. |
CA1028: 열거형 데이터 저장소는 Int32여야 합니다 | 열거형은 관련된 명명된 상수 집합을 정의하는 값 형식입니다. 기본적으로 System.Int32 데이터 형식은 상수 값을 저장하는 데 사용됩니다. 이 기본 형식을 변경할 수 있지만 대부분의 시나리오에서는 필요하지 않거나 권장되지 않습니다. |
CA1030: 적절한 경우 이벤트를 사용하세요 | 이 규칙은 일반적으로 이벤트에 사용되는 이름이 있는 메서드를 검색합니다. 명확하게 정의된 상태 변경에 대한 응답으로 메서드를 호출하는 경우 이벤트 처리기에서 메서드를 호출해야 합니다. 메서드를 호출하는 개체는 메서드를 직접 호출하는 대신 이벤트를 발생시켜야 합니다. |
CA1031: 일반적인 예외 유형을 catch하지 마세요. | 일반적인 예외는 포착해서는 안 됩니다. 보다 구체적인 예외를 포착하거나 catch 블록의 마지막 명령문으로 일반 예외를 다시 던집니다. |
CA1032: 표준 예외 생성자 구현 | 전체 생성자 집합을 제공하지 않으면 예외를 올바르게 처리하기 어려울 수 있습니다. |
CA1033: 인터페이스 메서드는 자식 형식으로 호출할 수 있어야 합니다 | 봉인되지 않은 외부 표시 형식은 공용 인터페이스의 명시적 메서드 구현을 제공하며 이름이 같은 외부에 표시되는 대체 메서드를 제공하지 않습니다. |
CA1034: 중첩된 형식은 표시되지 않아야 합니다. | 중첩 형식은 다른 형식의 범위에서 선언된 형식입니다. 중첩 형식은 포함하는 형식의 프라이빗 구현 세부 정보를 캡슐화하는 데 유용합니다. 이 용도로 사용되는 중첩 형식은 외부에 표시되지 않아야 합니다. |
CA1036: 비교 가능한 형식에 대한 메서드 재정의 | 공용 또는 보호된 형식은 System.IComparable 인터페이스를 구현합니다. Object.Equals를 재정의하지 않으며 같음, 같지 않음, 작음 또는 보다 큰 언어별 연산자를 오버로드하지도 않습니다. |
CA1040: 빈 인터페이스를 피하기 | 인터페이스는 동작 또는 사용 계약을 제공하는 멤버를 정의합니다. 인터페이스에서 설명하는 기능은 상속 계층 구조에서 형식이 표시되는 위치에 관계없이 모든 형식에서 채택할 수 있습니다. 형식은 인터페이스의 멤버에 대한 구현을 제공하여 인터페이스를 구현합니다. 빈 인터페이스는 멤버를 정의하지 않습니다. 따라서 구현할 수 있는 계약을 정의하지 않습니다. |
CA1041: ObsoleteAttribute 메시지를 제공합니다 | 형식 또는 멤버는 ObsoleteAttribute.Message 속성이 지정되지 않은 System.ObsoleteAttribute 특성을 사용하여 표시됩니다. ObsoleteAttribute를 사용하여 표시된 형식 또는 멤버가 컴파일되면 특성의 Message 속성이 표시되어 사용되지 않는 형식 또는 멤버에 대한 정보를 사용자에게 제공합니다. |
CA1043: 인덱서에 정수 또는 문자열 인수 사용 | 인덱서(즉, 인덱싱된 속성)는 인덱싱에 정수 또는 문자열 형식을 사용해야 합니다. 이러한 형식은 일반적으로 데이터 구조를 인덱싱하는 데 사용되며 라이브러리의 유용성을 높입니다. 개체 형식의 사용은 디자인 타임에 특정 정수 또는 문자열 형식을 지정할 수 없는 경우로 제한해야 합니다. |
CA1044: 속성은만 작성하면 안 됩니다. | 읽기 전용 속성을 사용하는 것이 허용 가능하고 종종 필요하지만 디자인 지침에 따라 쓰기 전용 속성을 사용하는 것이 금지됩니다. 이는 사용자가 값을 설정하도록 한 다음 사용자가 해당 값을 볼 수 없도록 하여 보안을 제공하지 않기 때문입니다. 또한 읽기 권한이 없으면 공유 개체의 상태를 볼 수 없으므로 유용성이 제한됩니다. |
CA1045: 참조 형식을 전달하지 마세요. | 참조로 형식을 전달(out 또는 ref 사용)하려면 포인터를 사용하고, 값 형식과 참조 형식의 차이점을 이해하고, 여러 반환 값이 있는 메서드를 처리해야 합니다. 일반 사용자를 위해 디자인하는 라이브러리 설계자는 사용자가 out 또는 ref 매개 변수를 사용하는 데 능숙할 것으로 기대해서는 안 됩니다. |
CA1046: 참조 형식에 대해 등호 연산자를 오버로드하지 마세요 | 참조 형식의 경우 같음 연산자의 기본 구현은 거의 항상 정확합니다. 기본적으로 두 참조는 동일한 개체를 가리키는 경우에만 동일합니다. |
CA1047: 봉인된 형식으로 보호된 멤버를 선언하지 마세요 | 형식은 상속 형식이 멤버에 액세스하거나 재정의할 수 있도록 보호된 멤버를 선언합니다. 정의에 따라 봉인된 형식은 상속할 수 없습니다. 즉, 봉인된 형식의 보호된 메서드를 호출할 수 없습니다. |
CA1050: 네임스페이스 형식 선언 | 형식은 이름 충돌을 방지하고 개체 계층 구조에서 관련 형식을 구성하는 방법으로 네임스페이스에서 선언됩니다. |
CA1051: 표시되는 인스턴스 필드를 선언하지 마세요. | 필드의 기본 사용은 구현 세부 정보여야 합니다. 필드는 프라이빗 또는 내부 필드여야 하며 속성을 사용하여 노출해야 합니다. |
CA1052: 정적 홀더 형식은 봉인해야 합니다. | public 또는 protected 형식은 정적 멤버만 포함하며 sealed(C#) 또는 NotInheritable(Visual Basic) 한정자를 사용하여 선언되지 않습니다. 상속되지 않는 형식은 봉인된 한정자를 사용하여 기본 형식으로 사용되지 않도록 표시해야 합니다. |
CA1053: 정적 소유자 형식에는 생성자가 없어야 | public 또는 nested public 형식은 정적 멤버만 선언하고 public 또는 protected 기본 생성자를 줍니다. 정적 멤버를 호출할 때 형식의 인스턴스가 필요하지 않으므로 생성자가 필요하지 않습니다. 문자열 오버로드는 보안 및 보안을 위해 문자열 인수를 사용하여 URI(Uniform Resource Identifier) 오버로드를 호출해야 합니다. |
CA1054: URI 매개 변수는 문자열이 아니어야 | 메서드가 URI의 문자열 표현을 사용하는 경우 이러한 서비스를 안전하고 안전한 방식으로 제공하는 URI 클래스의 인스턴스를 사용하는 해당 오버로드를 제공해야 합니다. |
CA1055: URI 반환 값은 문자열이 아니어야 | 이 규칙은 메서드가 URI를 반환한다고 가정합니다. URI의 문자열 표현은 구문 분석 및 인코딩 오류를 일으키기 쉬우며, 보안 취약점을 초래할 수 있습니다. System.Uri 클래스는 이러한 서비스를 안전하고 안전한 방식으로 제공합니다. |
CA1056: URI 속성은 문자열이 아니어야 | 이 규칙은 속성이 URI를 나타낸다고 가정합니다. URI의 문자열 표현은 구문 분석 및 인코딩 오류가 발생하기 쉬우며, 보안 취약성을 초래할 수 있습니다. System.Uri 클래스는 이러한 서비스를 안전하고 안전한 방식으로 제공합니다. |
CA1058: 형식은 특정 기본 형식을 상속해서는 안 되어야 합니다 | 외부에 표시되는 형식은 특정 기본 형식을 확장합니다. 대안 중 하나를 사용합니다. |
CA1060: P/Invokes를 NativeMethods 클래스로 이동 | Visual Basic에서 Declare 키워드를 사용하여 정의된 메서드 또는 System.Runtime.InteropServices.DllImportAttribute 표시된 메서드와 같은 플랫폼 호출 메서드는 관리되지 않는 코드에 액세스합니다. 이러한 메서드는 NativeMethods, SafeNativeMethods 또는 UnsafeNativeMethods 클래스여야 합니다. |
CA1061: 기본 클래스 메서드를 숨기지 마세요 | 기본 형식의 메서드는 파생된 메서드의 매개 변수 서명이 기본 메서드의 매개 변수 서명에 있는 해당 형식보다 더 약한 파생 형식에 의해서만 다른 경우 파생 형식의 동일한 명명된 메서드에 의해 숨겨집니다. |
CA1062: 공용 메서드의 인수 유효성 검사 | 외부에 표시되는 메서드에 전달되는 모든 참조 인수는 null에 대해 검사해야 합니다. |
CA1063: IDisposable을 올바르게 구현 | 모든 IDisposable 형식은 Dispose 패턴을 올바르게 구현해야 합니다. |
CA1064: 예외는 공개되어야 합니다 | 내부 예외는 자체 내부 범위 내에서만 표시됩니다. 예외가 내부 범위를 벗어나면 기본 예외만 사용하여 예외를 catch할 수 있습니다. 내부 예외가 System.Exception, System.SystemException또는 System.ApplicationException상속되는 경우 외부 코드에는 예외로 수행할 작업을 알 수 있는 충분한 정보가 없습니다. |
CA1065: 예기치 않은 위치에서 예외를 발생시키지 마세요 | 예외를 발생시킬 것으로 예상되지 않는 메서드가 예외를 발생시킵니다. |
CA1066: Equals 재정의할 때 IEquatable 구현 | 값 형식은 Equals 메서드를 재정의하지만 IEquatable<T>구현하지는 않습니다. |
CA1067: IEquatable 구현할 때 Equals 메서드를 재정의하다 | 형식은 IEquatable<T>구현하지만 Equals 메서드를 재정의하지는 않습니다. |
CA1068: CancellationToken 매개변수는 반드시 마지막에 와야 합니다. | 메서드에는 마지막 매개 변수가 아닌 CancellationToken 매개 변수가 있습니다. |
CA1069: 열거형에는 중복 값이 없어야 합니다 | 열거형에는 동일한 상수 값이 명시적으로 할당된 여러 멤버가 있습니다. |
CA1070: 이벤트 필드를 가상 선언하지 마세요. | 필드와 유사한 이벤트 가상으로 선언되었습니다. |
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET