C# static

카테고리 없음 2018. 12. 29. 20:10

static 한정자


- 특정 개체가 아니라 형식 자체에 속하는 정적 멤버를 선언할 수 있음

- 클래스, 필드, 메서드, 프로퍼티, 연산자, 이벤트, 생성자와 같이 사용 가능

- 인덱서, 소멸자에 사용 불가


=> 모든 정보가 인스턴스가 아니고 클래스에 담긴다고 생각하면 됨




static method


- Non Static Method 보다 속도가 빠름

- 인스턴스의 객체 멤버 참조 불가능

- 클래스 명을 통해서 사용 


NonStaticClass.StaticMethod();

- 파라미터 전달 가능


class NonStaticClass
{
    public int nonStaticField;
    public static int staticField;
    public static void StaticMethod(int inputValue)
    {
        staticField = inputValue;
    }
}

public static void Main()
{
    NonStaticClass.StaticMethod(7);
}



static field


- 인스턴스가 아닌 클래스에 속하므로 실행될 때 한번 초기화되고 계속 동일한 메모리를 사용

- Non Static Field는 인스턴스 생성할 때 마다 인스턴스에 할당되어 생기는 반면 static Field는 한 개만 존재





static class


- 프로그램이 로드될 때 정적 생성자가 한번 호출되면서 메모리에 로드됨

- 생명주기는 프로그램이 살아있는 동안이므로 프로그램이 종료되거나 crash 발생하는 경우에 해제됨

- 클래스를 인스턴스화 할 수 없음 (new 사용 불가)

- 정적 멤버만 포함(생성자도 마찬가지)

- static 생성자는 프로그램이 로드되고 난 직후 실행됨, 보통 static field를 초기화하는 경우에 사용


static class StaticClass
{
    public static int staticField;
           
    static StaticClass()
    {
        System.Console.WriteLine(staticField);
        staticField = 5;
    }
}

public static void Main()
{
    // 0이 먼저 출력되고
    System.Console.WriteLine(StaticClass.staticField);  //여기서 5가 출력됨
}


cf) static클래스는 static 멤버와 private 생성자만 포함된 클래스와 동일한 역할



Posted by @히테
,