작성날짜 : 2011-03-24 |
형식
Value 형식 | Reference 형식 |
Int i = 2; Int j = I; Stu s = new Stu(); Stu s2 = s;
값 형식 Int, double, char, bool 등등 | 개채를 참조하고 있는 것이고, 동일한 개체를 참조하는 것.
Class
|
구조체(int, double 등도 해당) 내부에 멤버필드, 멤버 메소드가 있다.
열거형 |
|
Stack에 할당 | Heap(Managed)에 할당 관리화 힙 |
둘 다 object 기반
모든 형식의 최상위 클래스가 object
Tostring, equal, equalto 등등 제공
Statement 구문
선언문
int i; i = i+2; |
조건식에 올 수 있는 것은 bool 형식이여야한다.
int i =2; if(i) << 안됨. if(i != 0) 이렇게 써야함. |
switch문에서 하나의 case당 break;가 꼭 있어야 한다.
For, while문은 똑같음.
int[] arr = new int[4]; arr[0] = 1; arr[1] = 2 arr[2] = 3; arr[3] = 4;
foreach(int i in arr) { Console.WriteLine("{0}",i); } |
foreach문은 내부적으로 IEnumerator 인터페이스를 파생 받고 있다.
Enumerator (열거자)
try {
} catch(Exception e) { } finally { } |
캡슐화
캡슐화 할 수 있는 형식
필드, 상수, 속성.
메서드, 이벤트, 연산자
인덱서, 생성자, 소멸자
중첩 형식
필드
int num = 8; const int snum = 7; // const는 묵시적으로 static. //묵시적 : 코드에 표시하지 않았지만 그와 같은 형식을 가지고 있다. //const는 클래스 멤버이다. //static 키워드를 사용할 수 없다. //const 멤버의 초기화 : 프로그램 시작할때 할당 된다. readonly int rnum; // 상수화 //생성자에서는 바꿀수 있지만, 다른 곳에서는 바꿀 수 없다. // 런타임시에 값이 확정된다. readonly Eye eye; // 클래스 멤버는 const로 명시할 수 없다. value 형식만 가능하다. // const는 프로그램이 시작할 때 할당 되고, 클래스는 런타임시 확정되므로 클래스 멤버는 const로 명시 할 수 없다.
static readonly srnum; // const 효과.. Stu() { rnum = 7; } |
속성
public int Num { // 내부적으로 제공.. 프로퍼티라 함. get { return Num; } // .NET Assembly에는 void Set_Num(int value) { num = value; } 라 되있음 set { Num = value; } } |
연산자
// C++에서는 bool operator == (int n) { return num == n; }
if(*s == 7) { }
static bool operator == (Stu s, int n) { return s.num = n; }
Stu s = new Stu(); s.num = 3; if( 3 == s.num) { } |
class LectureRoom { Stu[] arr = new Stu[50]; // 보관할 수 있는 인스턴스 50개를 생성.
Stu this[String s] { get { return arr[i]; } set { arr[i] = value; } } }
LectureRoom l = new LectureRoom(); Stu sealed = l[3];
// 닷넷에서 쓰는 방법. LectureRoom l = new LectureRoom(); Stu s = l["홍길동"]; |
인덱서
static int n;
static Stu() { } ~Stu() { } |
생성자
소멸자
정의를 해줘야할 경우가 생긴다.
네이티브 DLL을 참조해서 C#에서 사용하는데 네이티브 개체를 소멸해야 할 책임을 져야 할 경우가 생긴다. 그럴 경우 C#컴파일러는 네이티브 개체에 대한 소멸의 책임을 져주지 않기 때문에 개발자가 소멸의 책임을 져야 한다.
abstract int Foo(); // 추상메소드.. 구현을 정의하진 않는다.
virtual int Soo() { return 0; } int zoo() { return 0; } |
클래스 앞에는 inter와 static만 붙는다.
sealed class SpecialStu : Stu // 봉인 클래스 { override int Foo() { return 0; } override int Soo() { return 0; }
// 부모의 메소드와 동일한 시그니처를 가지고 있는 메소드를 만들고 싶을때 new int Zoo() { return 0; } } |
'Programming > .NET' 카테고리의 다른 글
[.NET] Static (0) | 2015.05.19 |
---|---|
[.NET] Const 와 readonly (0) | 2015.05.19 |
[.NET] Property(속성) (0) | 2015.05.11 |
[.NET] .NET Interface (0) | 2015.05.11 |
[.NET] .NET 개요 (0) | 2015.05.11 |