2013-07-11 6 views
2

이어야합니다. 요즘에는 몇 가지 문제에 대한 브레인 스토밍을하고 갑자기 한 가지 질문이 떠오릅니다. 나는 그것이 지역 사회에 물어보기로 결정했다. 질문 :정적 생성자는 반환 형식을 가질 수 없지만 정적 메서드는 반환 형식이 C#

정적 생성자는 반환 형식 (int, string 등)을 가질 수 없지만 정적 메서드는 C#에서 반환 형식을 가져야합니다.

컴파일을 통과하기 위해 두 가지 상황을 어떻게 구분합니까?

static Class staticClass 
{ 
    public static staticClass(){} //right 

    public static int staticClass(){} //wrong 

    public static int staticMethod(){} //right 
} 

답변

3

정적 생성자는

올바른 반환 형식 (INT, 문자열 등)을 가질 수 없습니다. 그러나 (정적 인) 생성자는 아무것도 반환 할 필요가 없습니다.

정적 메서드는 C#에서 반환 형식을 가져야합니다.

잘못된. 정적 메소드는 void 메소드가 될 수 있습니다.

C# 컴파일러는 구별 않는 방법

...

static class StaticClass 
{ 
    public static StaticClass(){} //right : Wrong. 'public' is not allowed. 

    public static int StaticClass(){} //wrong : Indeed wrong. Member cannot have same name as class 

    public static int StaticMethod(){} //right 
} 
+0

두 번째 문장에서 요점은 명시 적으로 아무 것도없고 메소드 일 때도 코드 블록에 의해 반환되는 것에 대한 구문적인 표시가 있다는 것입니다 . 두 번째 예제는 클래스와 동일한 이름을 가진 메소드로 해석됩니다. 반환 유형이 정의되어 있기 때문입니다 ('void'인 경우 비교 가능한 오류가 발생합니다). 첫 번째 예제는 구문 분석기가 반환 유형이 없기 때문에 불필요한 액세스 가능성 수정자를 가진 정적 생성자이며 누락 된 반환 유형이있는 멤버가 아닌 것으로 간주됩니다. – Servy

+0

예, 실수가 잘못되었습니다. public static StaticClass() {} // 잘못된 것입니다. 정적 생성자에 수정자를 사용할 수 없습니다. –

0

정적 생성자는 생성자의 유형은 주먹 클래스 객체를 초기화하는 동안 전화를 어떤 반환 타입 이유가 없다는 것을 의미합니다. 그러나 정적 메소드는 클래스의 이름을 호출하는 메소드입니다. 당신이 클래스 A를 가지고 있고 정적 문자열 display() 메소드를 가지고 있다면 A.display()를 호출 할 수 있습니다. 왜냐하면 정적 메서드는 클래스의 모든 객체에 공통적이기 때문입니다. 생성자와 그의 타입 체크에 대해 더 알고 싶다면이 URL constructors-net-using-csharp-singleton-pattern/