작성날짜 : 2011-03-24 |
참고 : 상수 (http://msdn.microsoft.com/ko-kr/library/ms173119.aspx)
readonly (http://msdn.microsoft.com/ko-kr/library/acdd6hb7.aspx)
선문비트 프로젝트 : http://cafe.daum.net/smbitpro?t__nil_cafemy=item
Const 와 readonly
const
Const는 상수를 선언할 때 사용하는 예약어입니다. 상수는 컴파일 시에 인식하여 프로그램 중에 값을 변경할 수 없습니다. 상수는 기본 형식에만 적용할 수 있는데 개체 인스턴스의 경우 런타임 시에 할당되기 때문입니다. 또한, const는 자동적으로 정적 멤버가 되며 static을 사용할 수가 없습니다. 그리고, 상수를 선언할 때에는 반드시 값을 초기화 해 주어야 합니다.
readonly
readonly는 읽기 전용 멤버를 정의할 때 사용하는 예약어입니다. const는 컴파일 시에 상수 값이 결정되지만 readonly는 런타임 상수로 사용할 수 있습니다. 또한, readonly는 인스턴스의 멤버를 상수화 할 때에도 사용이 가능하며 경우에 따라static을 이용하여 정적 멤버로도 선언이 가능합니다. const의 경우 기본 형식에만 사용이 가능했지만 readonly는 개체 인스턴스에도 사용이 가능하기 때문에 런타임 정적 상수화를 해야 하는 경우에 사용하여 정적 멤버를 상수화 할 수 있습니다. 그리고, const는 선언문에서 반드시 초기화를 해야 했는데 readonly의 경우 선언문 및 생성자를 통해서 초기화가 가능합니다.
namespace AboutConstant { class Foo { int i;
public void Hello() { I++; }
//멤버 프로버티를 사용하는 이유.. 멤버필드의 접근하는 것의 대한 신뢰성을 보장하기 위해서 사용한다. public int I { get { return i; } private set { i++; } } }
class Stu { // const가 묵시적 static 멤버라는 것을 입증. public const int max_stu = 1000; //public const Foo foo = new Foo(); //'AboutConstant.Stu.foo'의 형식이 'AboutConstant.Foo'입니다. 참조 형식이 문자열이 아닌 const 필드는 null로만 초기화할 수 있습니다. // static한 멤버 레퍼런스를 만들때는 readonly를 사용하라. public static readonly Foo foo = new Foo();
static int snum; // 우리가 C++에서 사용했던 const는 C#에서 readonly라고 볼 수 있다. public readonly int num; //public readonly int num=4; // 이니셜라이저 // 순차적으로 번호가 부여. public Stu() { num = SetNum(); }
/* void Hoo() { num++; //읽기 전용 필드에는 할당할 수 없습니다. 단 생성자 또는 변수 이니셜라이저에서는 예외입니다. } */
static int SetNum() { snum++; return snum; } }
class Program { static void Main(string[] args) { Console.WriteLine("{0}",Stu.max_stu); } } }
|
'Programming > .NET' 카테고리의 다른 글
[.NET] Method (0) | 2015.05.19 |
---|---|
[.NET] Static (0) | 2015.05.19 |
[.NET] Property(속성) (0) | 2015.05.11 |
[.NET] .NET Interface (0) | 2015.05.11 |
[.NET] .NET 형식 (0) | 2015.05.11 |