2012-07-13 2 views
2

가능한 중복 :
C#.NET - Why do members of a static class need to be declared as static? Why isn't it just implicit?C#에서 정적 클래스를 만들면 정적으로 명시 적으로 선언되었는지 여부에 관계없이 내부의 메서드도 정적으로 간주됩니까?

내가 정적으로 선언 내에서 (I 명시 적으로 static으로 선언하지 않음) 메서드를 호출 할 때이 점에서, 흥미로운 오류를 얻고있다 클래스를 사용하면 메시지가 표시됩니다.

비 정적 필드, 메서드 또는 속성 'MangoTree.Twitter.OAuthClient.PerformRequ 동부 표준시 (System.Collections.Generic.Dictionary, 문자열, 문자열, 문자열, MangoTree.Twitter.OAuthClient.RequestType) '

내가 명시 적으로 정적 메소드를 선언 할 때, 오류가 도망 간다, 나는이를 제거 할 수 있습니다 정적 선언자를 클래스 선언에서 제거하면 오류가 사라집니다. 저를 혼란스럽게하는 것은 제가 클래스를 정적으로 선언했을 때 명시 적으로 선언하지 않아도 클래스 내의 모든 내용이 자동으로 정적이어야한다는 인상하에있었습니다. 당신이 필요 내부 C#에서 정적 클래스, 메소드를 작성하는 경우

+3

복제본 : http://stackoverflow.com/questions/6005109/c-net-why-do-members-of-a-static-class-need-to-be-declared-as-static-why-isn .... 에릭의 위대한 대답으로 .... – Usman

답변

3

내가 정적으로 클래스를 선언 할 때

정적 클래스의 모든 구성원은 참으로해야합니다, 클래스 내에서 모든 것이 자동으로뿐만 아니라 정적해야한다는 인상이었다입니다 정적이지만 자동으로 일어나지는 않습니다. 모든 멤버를 정적으로 명시 적으로 선언해야합니다.클래스를 정적으로 선언하는 목적은 컴파일러가 모든 멤버가 정적이라는 검사를 수행하고 정적 클래스의 인스턴스를 만들지 못하도록하는 것입니다.

0

당신은 클래스의 인스턴스를 생성하지 않고 비 정적 멤버 함수를 호출하지 못할. 따라서 정적 클래스 캔트가 인스턴스화 될 수 있기 때문에 첫 번째 경우에는 정적 함수에서 비 정적 함수를 호출 할 때 오류가 발생합니다. 클래스가 아닌 정적이며 하나의 정적 인의 두 가지 방법이있는 경우

그러나, 당신은 아주 잘 정적 멤버와 클래스 이후이

public class Foo 
{ 
    public void Test() 
    { 
    } 

    public static void Test1() 
    { 
     Foo foo = new Foo(); 
     foo.Test1(); 
    } 
} 

같은 정적 함수 내에서 비 ​​정적 멤버 함수를 호출 할 수 있습니다 정상 클래스를 인스턴스화하기 전에 인스턴스화 된 경우 정적 함수는 정상 함수의 존재를 알 수 없습니다.

두 번째 경우에는 두 함수 모두 정적으로 선언되었으므로 아무런 문제가 없습니다. 나를 혼란 무슨

0

C# 컴파일러는 정적 클래스를 인스턴스화 할 수 없거나 정적 클래스에서 상속받지 못하기 때문에 정적 클래스를 'sealed abstract'로 표시합니다. 이 때문에 클래스를 인스턴스화 할 수 없기 때문에 정적이 아닌 멤버를 호출 할 수 없으므로 정적 클래스의 비 정적 멤버를 정의하는 데 실질적인 가치가 없습니다. 따라서 정적 클래스에서 정적 멤버 만 정의해야합니다. 날씨 클래스는 정적 또는 디자인 디자인 결정이 있어야합니다.

관련 문제