Intro
- object-oriented 언어
- component-oriented 언어
- GC가 접근불가한 unused 객체로 메모리가 가득찬 경우, 자동으로 호출됨
- nullable type이 비할당 객체에 대한 참조를 대신함
- Exception handling이 error detection과 recovery를 지원
- Lambda expression이 functional programming 기술을 지원
- LINQ 문법이 모든 소스에 대한 data에 common pattern을 만듦
- unifed type system이 모든 primitive 타입에 대해
object
라는 root type을 지정 - asynchronous operation으로 분산 시스템 제공
reference type
과value type
으로 값을 다룰 수 있음- Generic 지원, Iterator 지원
.Net Architecture
- C# Program은 .Net 위에서 실행됨
- 가상의 실행 시스템을 CLR(Common Language Runtime)이라 부름
- CLR은 CLI(Common Language Infrastructure)의 구현임
- C#은 IL(Intermediate Language: CLI를 준수함)로 compile 됨
- IL과 resources(bitmap, string…)는 assembly로 저장됨 -> (.dll)
- assembly는 manifest(version, culture, assembly types)를 포함
C# 프로그램 실행
- Assembly가 CLR에 로드
- CLR이 JIT compilation(IL을 native 기계어로 변환) 실행
- JIT 컴파일: 프로그램을 실행하는 시점에 기계어로 번역함
- CLR이 GC, exception handling, 자원 관리를 지원
- CLR이 실행하는 code는 managed code라고 칭함
- unmanaged code는 특정 플랫폼을 대상으로 하는 native 기계어로 compile
Types and Variables
- Value type: 직접적으로 data를 포함 {simple, enum, struct, nullable, tuple}
- Reference type: data의 참조를 포함
- Identifier: 변할 수 있는 이름
user-definable
class, struct, interface, enum, delegate, tuple이 있다.
- Record
- compile-synthesized member
- 관련된 행동이 없으면 우선적으로 고려할 수 있음
- Class
- fields(data member), function members (method, property …)를 정의
- 단일 상속, 다형성(파생 class가 base class를 확장하고 전문화할 수 있음) 지원
- Struct
- class와 유사하지만, value type으로, heap allocation이 필요하지 않음
- user-specified 상속이 불가 (암묵적으로 object를 상속함)
- Interface
- public member의 이름의 집합
- class와 struct는 interface를 implement 함
- interface는 복수의 interface를 상속할 수 있음
- Delegate
- method의 참조를 return type, 특정 parameter list와 함께 표현
- method를 할당된 변수처럼 취급하고, parameter로 넘길 수 있음
Others
- array
int[]
: int의 1차원 배열int[,]
: int의 2차원 배열int[][]
: int[]의 1차원 배열
- nullable
- non-nullable type T에 대해, T?는 null을 취급할 수 있는 타입임
- ex) int?는 32-bit integer를 가지거나 null임
- object
- 모든 type은 object로 다룰 수 있음
- 모든 reference type은 object로 casting할 수 있고, 모든 value type은 obejct로 boxing 할 수 있음
- Boxing:값은 참조 타입의 인스턴스로 복사됨
- Unboxing: 값 타입으로 casting될 수 있는 참조타입을 값 타입으로 casting 함
모든 변수는 어떤 값이 저장될 수 있는지 결정하는 방식에 따라 구분할 수 있음
- Non-nullable type: 정확한 type에 대한 값
- nullable type: null 혹은 정확한 type에 대한 값
- object: null 참조, 참조 타입에 대한 오브젝트의 참조, 값타입이 boxing된 값에 대한 참조
- class type: null 참조,
class
type의 instance에 대한 참조, 해당class
파생 type의 instance에 대한 참조 - interface type: null 참조,
interface
를 구현하는 instance에 대한 참조, 해당interface
를 구현한 값 type의 boxing된 값에 대한 참조 - array type: null 참조, array type에 대한 instance의 참조, compatible array type의 instance에 대한 참조
- delegate type: null 참조, 호환되는
delegate
type의 instance에 대한 참조
Program Structure
- Programs가 member를 포함하고, namespace 안에 구성될 수 있는 types를 선언함
- types: classes, structs, interfaces …
- members: fields, methods, properties, events …
- C# Program이 compile 되었을 때, 물리적으로 assemblies 안에 패키지 됨
- Assemblies는 일반적으로,
.exe
나.dll
확장자를 사용- Application이나 Library를 구현하는 여부에 따라 결정