CA1812: 인스턴스화되지 않은 내부 클래스를 사용하지 마십시오.

속성
규칙 ID CA1812
타이틀 인스턴스화되지 않은 내부 클래스를 사용하지 마세요.
범주 성능
수정 사항이 주요 변경인지 여부 주요 변경 아님
.NET 8에서 기본적으로 사용 아니요

원인

내부(어셈블리 수준) 형식은 인스턴스화되지 않습니다.

규칙 설명

이 규칙은 형식의 생성자 중 하나에 대한 호출을 찾으려고 시도하고 호출을 찾을 수 없는 경우 위반을 보고합니다.

다음은 이 규칙에서 검사되지 않는 형식입니다.

  • 값 형식
  • 추상 형식
  • 열거형
  • 대리자
  • 컴파일러에서 내보낸 배열 형식
  • 인스턴스화할 수 없고 메서드만 정의하는 static 형식입니다.

분석 중인 어셈블리에 적용 System.Runtime.CompilerServices.InternalsVisibleToAttribute 하는 경우 이 규칙은 friend 어셈블리에서 필드를 사용할 수 있으므로 기본적으로 VisualFriend Basic에서 표시된 형식 internal 에 플래그를 지정하지 않습니다. 어셈블리를 분석하려면 분석할 코드 구성을 참조하세요.

위반 문제를 해결하는 방법

이 규칙의 위반 문제를 해결하려면 형식을 제거하거나 해당 형식을 사용하는 코드를 추가합니다. 형식에 메서드만 static 포함된 경우 컴파일러가 static 기본 공용 인스턴스 생성자를 내보내지 않도록 형식에 한정자를 추가합니다.

경고를 표시하지 않는 경우

이 규칙의 경고를 표시하지 않아도 됩니다. 다음과 같은 상황에서는 이 경고를 표시하지 않는 것이 좋습니다.

  • 클래스가 System.Activator.CreateInstance 같은 런타임에 바인딩된 리플렉션 메서드를 통해 만들어집니다.

  • 클래스는 종속성 주입 패턴의 일부로 IoC(제어 반전) 컨테이너에 등록됩니다.

  • 클래스가 런타임 또는 ASP.NET에 의해 자동으로 만들어집니다. 자동으로 만들어진 클래스의 몇 가지 예로는 System.Configuration.IConfigurationSectionHandler 또는 System.Web.IHttpHandler를 구현하는 클래스가 있습니다.

  • 클래스는 클래스 정의에서 형식 매개 변수로 사용되며 제약 조건이 있습니다.new 다음 예제는 규칙 CA1812를 통해 플래그가 지정됩니다.

    internal class MyClass
    {
        public void DoSomething()
        {
        }
    }
    public class MyGeneric<T> where T : new()
    {
        public T Create()
        {
            return new T();
        }
    }
    
    MyGeneric<MyClass> mc = new MyGeneric<MyClass>();
    mc.Create();
    

경고 표시 안 함

단일 위반만 표시하지 않으려면 원본 파일에 전처리기 지시문을 추가하여 규칙을 사용하지 않도록 설정한 후 다시 사용하도록 설정합니다.

#pragma warning disable CA1812
// The code that's violating the rule is on this line.
#pragma warning restore CA1812

파일, 폴더 또는 프로젝트에 대한 규칙을 사용하지 않도록 설정하려면 구성 파일에서 심각도를 none으로 설정합니다.

[*.{cs,vb}]
dotnet_diagnostic.CA1812.severity = none

자세한 내용은 방법: 코드 분석 경고 표시 안 함을 참조하세요.

분석할 코드 구성

다음 옵션을 사용하여 이 규칙이 실행될 코드베이스 부분을 구성합니다.

이 규칙, 적용되는 모든 규칙 또는 적용되는 이 범주의 모든 규칙(성능)에 대해 이 옵션을 구성할 수 있습니다. 자세한 내용은 코드 품질 규칙 구성 옵션을 참조하세요.

InternalsVisibleTo 특성 무시

분석 중인 어셈블리가 내부 기호를 노출하는 데 사용하는 InternalsVisibleToAttribute 경우 기본적으로 이 규칙은 사용하지 않도록 설정됩니다. 어셈블리가 표시된 InternalsVisibleToAttribute경우에도 규칙이 실행되도록 지정하려면 프로젝트의 .editorconfig 파일에 다음 키-값 쌍을 추가합니다.

dotnet_code_quality.CAXXXX.ignore_internalsvisibleto = true

이 옵션은 .NET 8부터 사용할 수 있습니다.