본문으로 바로가기

static, const, readonly, unsafe, fixed

category Development/C# 2012. 2. 27. 17:26

1. static

- 모든 클래스에서 공유하기 위한 멤버를 선언하는데 사용

- 변수, 함수, 속성, 연산자 및 생성자에 사용 가능

- 스태틱으로 선언된 멤버 필드는 하나의 메모리만 생성

- 스태틱에 접근하는 방법: 클래스의 이름으로 접근

- 스태틱 메모리의 생성시기: 객체를 생성하기 이전에 메모리 생성

-스태틱 멤버 함수의 주의점

· 스태틱 함수를 이용하여 일반 멤버 필드에 접근 불가: 일반 멤버 필드는 객체 생성 후에 존재하기 때문

-스태틱 멤버의 값 초기화 방법

· 선언하는 순간

· 스태틱 생성자: 스태틱 멤버 필드의 메모리가 생성된 직후 호출되는 스태틱 전용의 생성자

2. C#에서 상수를 만드는 방법

- const

· 자동으로 static

· 반드시 초기화

-readonly

· static을 사용하면 스태틱 상수, 사용하지 않으면 일반 상수

· 반드시 초기화 필요 없음.

· 생성자에서 딱 한번 값을 할당할 수 있음. 생성자에서 값이 결정되면 변경 불가능

· 생성자를 통해 런타임 시 값을 초기화 하고자 할 때 사용

· static readonly: 스태틱 생성자에서 초기화 가능, 클래스의 이름으로 접근 가능

· 일반 readonly: 생성자에서 초기화 가능, 객체의 이름으로 접근 가능

3. unsafe

- C#에서 포인터를 사용하면 unsafe code --> garbage collector 때문.

- 사용자가 직접 메모리를 제어하는 것이 불안전 함.

- 해결 방법: fixed 키워드

4. fixed

- 사용자가 포인터 사용시 메모리의 고정을 보장

- unsafe 코드 내에서만 사용 가능

ex. unsafe static void DoubleSum(int* p){

     int a=*p;

     *p=a+a;

}

unsafe static void Main(){

     Point pt = new Point();

     pt.x=5;

     pt.y=6;

     fixed(int* p=&pt.x){

          DoubleSem(p);

          }

}