C#의 발전 내용
C# 1.0
VM언어이지만 Interop을 고려
PInvoke, unsafe(pointer), delegate
c# 2.0 제네릭
c# 2.0 ?? 연산자
c# 2.0 yield return/break
c# 2.0 partial class
- 클래스의 구현을 2개 이상으로 분리
- 자동 코드 생성의 문제점 해결!
c# 2.0 anonyumous method
- 이름 없는 메서드 정의 가능
- delegate 타입의 인자로 인라인 메서드 정의
- 이벤트 처리기
c# 2.0 static class
- IL 코드 표현 : 상속 불가능한 추상 클래스
- C# 컴파일러 : 인스턴스 멤버 정의 불가능
1. C++의 Template과 유사
2.메서드 수준의 제네릭 지원
3. 박싱/언박싱 문제 해결
참조 형식이면 상관이 없지만, 값형식일 경우는 제너릭을 사용하는게 좋다.
4. 1) 제약1 - 상속타입
2) 제약2 - 값/참조 타입
3) 제약3 - 인자 없는 생성자 필수
c# 2.0 - Nullable 타입
.net 2.0 BCL: Nullable<T> 구조체 추가
c#의 경우 T? 형태로 단축 표기
C# 3.0 자동 구현 속성
- Field + Property 구현을 단순화
- Get/Set의 접근 제한자
C# 3.0 컬렉션 초기화
- ICollection 인터페이스를 구현한 타입
- 컬렉션의 요소를 new 구문에서 추가
C# 3.0 - LINQ
- LINQ : Language-Inegrated Query
-> 언어에 통합된 쿼리 표현식(Query Expressions)
-SQL 쿼리의 SELECT와 유사
C# 3.0 - var 예약어
- 컴파일러가 로컬 변수의 형식을 추론
- C++ 11의 auto 예약어와 동격
C# 3.0 - 객체초기화(1)
- 공용 속성을 통해 객체 생성시에 초기화
- LINQ에 사용 anonyumous type
- 컬렉션 초기화 + 객체 초기화
C# 3.0 - 익명 타입
이름 없는 타입
- 내부적인 처리는 익명 메서드와 유사
- var 사용은 필수
- Linq Select,Join
C# 3.0 - 확장메서드
- 정적 메서드를 마치 인스턴스 메서드처럼 사용
- 결국 정적 메서드 호출
- 쿼리 구문과 메서드 기반 구문 (53분)
- WEHER
- ORDER BY
C# 3.0 람다 식
- 추론을 통해 delegate 익명 메서드 개선
- 값 반환 + 단문 메서드 -> return + 중괄호 생략
- 메서드 기반 쿼리를 단순화.
- 데이터로써의 람다 => Expression Tree
- Exptression Tree 컴파일
- SQL 쿼리를 생성
LINQ TO SQL 실행 시 실제 쿼리로 생성이 된다.
- 사례2) 공용 속성 이름
LINQ to...
표준 쿼리 연산자
C# 4.0 - 선택적 매개 변수
선택적 매개변수
-C++의 디폴트 매개변수
C# 4.0 - 명명된 인자.
-인자의 이름으로 호출 측에 값 전달
C# 4.0 - dynamic
-실행 시에 결정되는 타입
-결국엔 object 타입
-IronPython과 C#
-C#에서 IronPython 메서드 연동
'
C# 5.0 - 호출자 정보 (다시 봐야함)
C++의 3가지 메크로 상수에 대응
C# 5.0 - async-await
-마치 동기 방식처럼 비동기 호출
-사용자 정의 ...Async 메서드