아디봉의.net

C# const 상수 본문

C#

C# const 상수

아디봉 2012. 9. 17. 21:33

const 상수

c#에서 상수 선언하는 방법

1) const키워드 사용하는 방법

 

 

ex) public const int SALLERY = 7070;

const로 선언한 상수는 내부에서 자동으로 static 가 된다.

* 스태틱으로 선언된 필드나 함수는 스태틱이라고 하는 특수한 메모리 영역에 단 하나의 메모리가 생성되기 때문에 클래스 전체에 공유할 수 있다. 그리고 스태틱의 특성상 객체를 생성하지않고 클래스의 이름으로 상수에 바로 접근이 가능하다.

 

특징1 - const상수는 자동으로 static 가된다.

특징2 - const로 선언한 변수는 반드시 초기화 되어야 한다.

 

여러개의 const상수선언

ex) public const int A = 1, B=2, c=3;

const상수는 반드시 컴파일시에 미리 상수의 값이 초기화 되어있어야한다. 상수의 특성상 초기에 설정하지 않으면 다시는 설정할 수 없게 된다.

 

const상수가 static라는 것을 증명해주는 예제

using System;

public class ConstSample{

public const int BOY = 9, MAN = BOY + 12;

 

}

 

public class ConstTest{

public static void Main{

Console.WriteLine("BOY = " + ConstSample.BOY);//객체를 생성않고 바로 const상수에 접근

Console.WriteLine("MAN =" + ConstSample.MAN);//객체를 생성않고 바로 const상수에 접근

}//main

}//class

 

 

2) readonly 키워드 사용방법

초기화 해주지 않아도됨, 언제가는 값을 할당해줘야 하는데 그것이 생성자에서 딱한번  할당할수 있는 방법을 제공한다.

 

특징1 - 반드시 초기화 필요 x

public readonly int READ;

 

특징2 - readonly 키워드를 사용하면 스태틱 상수(유일무이한 오직 하나의 메모리를 가지는 상수)가 되고, 사용하지 않으면 일반상수(객체가 생성될 때마다 메모리가 생성되는 객체상수)가 된다.

 

static readonly

- static readonly일 경우 생성자에서 초기화 할수 있다.

- static readonly일 경우 클래스의 이름으로 접근가능

일반 readonly

- 일반 readonly 일경우 생성자에서 초기화 할수 있다.

- 일반 readonly 일 경우 객체의 이름으로 접근가능

 

using System;

public class ReadonlyTest{

public readonly static int STATIC_READONLY = 1

public readonly int NOMAL_READONLY = 1

 

static ReadonlyTest() // 스태틱 생성자

{

STATIC_READONLY  = 100;

}

public ReadonlyTest() //일반 생성자

{

NOMAL_READONLY = 10000;

}

 

public static void main(){

Console.WriteLine("STATIC_READONLY" + ReadonlyTest.STATIC_READONLY);

ReadonlyTest rt1 = new ReadonlyTest();

Console.WriteLine("NOMAL_READONLY" + rt1.NOMAL_READONLY);

}//main

}//class

 

특징3

- readonly 상수는 생성자를 통해서 런타임시 값을 초기화 하고자 할 때 사용한다.

- 생성자에서 값이 결정되면 다시는 그 값을 변경 할수 없다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'C#' 카테고리의 다른 글

c# 책 인터넷으로 읽어보기  (0) 2012.09.27
C#에서의 포인터 사용  (0) 2012.09.17
C# static 과 상수  (0) 2012.09.16
call by XXX  (0) 2012.09.16
프로그램과 메모리 , 스택과 힙  (1) 2012.09.16