2009-10-27 7 views
1

각 정적 호출이 새 스레드를 시작합니까? 예컨대 : 들어정적 메서드 호출

class A 
{ 
    public static void displayName() 
    { 
     Console.WriteLine("myName"); 
    } 

    public static void displayAge() 
    { 
     Console.WriteLine("myAge"); 
    } 
} 


class B 
{ 
    public void Foo() 
    { 
     A.displayName(); 
     A.displayAge();   
    } 
} 

윌 위의 호출은 서로 독립적으로 실행? 그렇다면 스레딩과 비슷한 것입니까?

+2

정적 메소드의 사용은 멀티 스레딩과 절대 관련이 없습니다. – okutane

+0

하지만 인스턴스가없고 정적 멤버 만 포함되어 있으므로 각 정적 호출이 서로 독립적이라고 들었습니다. 그렇지? 완성을 위해 –

답변

10

회신 :

하지만 난 거기에 더 예를 없고 정적 멤버가 이 참여하는 각 정적 호출은 서로 독립적 입니다 들었다. 그렇지? - 스리 쿠마 36 분 전

당신이 당신의 클래스의 '글로벌'인스턴스이며, 모든 정적 메서드는이 인스턴스에 의해 개최됩니다 생각할 수 있습니다.

예에서와 같이 ClassA myA = new ClassA()을 호출하여 '사용자'인스턴스를 만들 수 있습니다. 한편 런타임에는 생성되지만 사용자에게는 보이지 않는 '전역'인스턴스가 있으며이 인스턴스에는 정적 메서드가 있습니다. 이 '글로벌'인스턴스 내에서 정적 메서드 동작이 인스턴스 메서드로 사용됩니다.

놀랍게도 C#에는 '글로벌'인스턴스가 런타임에 의해 초기화 될 때 호출되는 정적 생성자가 있습니다.

당신이 코드를 테스트 할 수 있습니다

class A 
{ 
    static A() { 
     Console.WriteLine("Creating the global instance of class A...."); 
    } 

    public static void displayName() 
    { 
     Console.WriteLine("myName"); 
    } 

    public static void displayAge() 
    { 
     Console.WriteLine("myAge"); 
    } 
} 


class B 
{ 
    public void Foo() 
    { 
     A.displayName(); 
     A.displayAge();   
    } 
} 

출력 될 것입니다 :

Creating the global instance of class A.... 
myName 
myAge 

을이 외에도에서, 정적 메서드는 인스턴스 메서드에서 아무것도 차이가 있습니다.

각 정적 메서드의 변수는 자체 범위를 가지며 한 메서드에서 다른 메서드로 독립적입니다.

+0

+1! – pyrocumulus

1

아니 당신은 그들이 당신이 호출 한있는 동일한 스레드에서 실행됩니다 다른 스레드에서 그들을 호출하지 않는 한 그들이

1

호 정적 방법은 다른 방법처럼 동일한 스레드에서 순차적으로 실행됩니다.

정말 어디에서 호출해야하는지에 따라 다릅니다. 정적 메서드 자체는 스레드를 만들지 않고 내부에서 실행됩니다. 정적 호출과 관련하여 의심에

0

정적 메서드는 연결된 클래스가없는 메서드입니다. 즉 정적 메서드 호출은 호출되는 개체를 기준으로 확인되는 가상 메서드와 달리 모든 간접 참조를 거칠 필요가 없습니다.

모든 메소드는 가상 메소드 또는 정적 메소드 호출 스레드에서 실행됩니다. 메서드를 다른 스레드에서 실행하려면 스레드 풀이나 다른 기술을 사용하십시오.

0

한 가지 더 :

내가 각 정적 호출을 듣고 정말 독립적이지 서로

정적 메소드 호출의 독립적입니다.

정적 메서드는 동일한 클래스의 다른 정적 필드와 속성 또는 공개적으로 표시되는 정적 필드와 다른 클래스의 속성에 액세스 할 수 있습니다.이 속성은 전역 적이며 응용 프로그램 수명 동안 유지됩니다.

정적 필드의 상태를 변경하는 정적 메서드는 사용자가 제안한 것처럼 "독립적"이 아닙니다. 항상 단일 인스턴스 (항상 동일한 개인 데이터 사용)에서 항상 호출된다는 것을 말할 수 있습니다.