2012-07-02 3 views
13

public, private과 같은 액세스 한정자는 C#의 정적 생성자에서 사용할 수 없습니다. 그러나 Visual Studio 코드 분석에는 "CA2121: Static constructors should be private"이라는 C# 보안 범주의 경고가 있습니다.정적 생성자를 비공개로 만들 수있는 방법은 무엇입니까?

정적 생성자를 비공개로 설정할 수 있습니까? 또는 Visual Studio 코드 분석 오류입니까?

CLARIFICATION : 저는 비공개 생성자를 만들려고하지 않습니다. 왜?" 질문은 부적합합니다. 두 Microsoft 도구 간의 모순에 대해 궁금해서 정적 생성자를 처리하는 방법에 대해 알지 못하는 것이 있는지 확인하려고합니다. 당신이 문서를 읽으면

+0

위의 링크에서 인용 한 내용은 다음과 같습니다. '정적 생성자가 호출되는 시점을 사용자가 제어 할 수 없습니다. 정적 생성자가 private이 아닌 경우 시스템이 아닌 다른 코드에서 호출 할 수 있습니다. 생성자에서 수행되는 작업에 따라 예기치 않은 동작이 발생할 수 있습니다. ' – Tisho

+1

관련 인용문은 "이 규칙은 C# 및 Visual Basic .NET 컴파일러에서 적용됩니다."라고 생각합니다. 따라서 C#에서는 비공개로 설정할 수 없습니다. – Henrik

답변

9

정적 생성자는 항상 private입니다. C# 코드에 대한 경고는 절대로 볼 수 없으며 경고는 유용하지 않습니다. 코드 분석은 다른 언어에서도 사용할 수 있습니다. 비공개 정적 생성자를 사용하여 클래스를 작성할 수있는 다른 언어도 있습니다.

+0

그렇다면 왜 C#에 적용 가능한 것으로 명시되어 있습니까? 그것이 오류라고 생각합니까? –

+0

@ssg 어디서 언급 했습니까? – hvd

+0

@ssg "이 규칙은 C# 및 Visual Basic .NET 컴파일러에서 적용됩니다."귀하의 질문에 대한 의견에 언급 한 다음 아니오, 컴파일러가 이미 정적 생성자가 비공개임을 보장하므로이 경고가 트리거되지 않아야 함을 의미합니다. – hvd

3

는 명확 정적 생성자가 개인이 아닌 경우,이 시스템이 아닌 다른 코드를 사용하여 호출 할 수 있습니다

을 말한다. 생성자에서 수행되는 작업에 따라 예기치 않은 동작이 발생할 수 있습니다.

나는 더 중요한 질문은 싶을 것 생각?

+0

문제는, 할 수 없습니다. 정적 한정자에 액세스 수정자를 추가하려고하면 컴파일러에서 오류가 발생합니다. IL 수준일까요? –

+0

C#에서는 cctor가 비공개가되지 않습니다. 위의 Hendriks 주석을 참조하십시오. – usr

+0

@ssg 나는 왜'private'가 아닌 다른 것이 필요한지 스스로에게 물을 것이다. C# 팀이 비공개 정적 생성자를 사용하는 트릭을 놓친 것보다 설계가 아마 잘못 될 가능성이 높습니다. – James

1

정적 생성자를 비공개로 설정할 수 있습니까?

어떤 의미입니까?

정적 생성자는 메서드가 실행되기 전에 클래스가 링커에서로드되는 순간이라고합니다. 따라서 정적 생성자는 링커에서 자동 호출 외부로 호출 할 수 없으므로 액세스 수정자가없는 의미는 없습니다.

기본적으로 정적 수정 자없이 클래스를 참조 할 수는 없으며 참조가 포함 된 코드가 실행되기 전에는이를 참조 할 수 없습니다.

관련 문제