ReturnType Func<T>(T[] a) { ... }
사용할때는 T를 꼭 명시할 필요는 없음
class MyClass<T> { ... }
field 초기화 시 default를 사용하는 것이 좋음(T가 뭐가 들어올지 모르므로)
T의 method를 사용할 때 dynamic keyword를 사용해서 type check를 runtime으로 미루는게 좋음
type check를 compile time에 수행하지 않고 runtime에 수행
Object에서 Runtime에 Unboxing 수행하는 개념, 덕분에 동일 변수명으로 형변환이 가능, casting 필요 없음
C++의 auto와는 조금 다른 개념. auto는 var와 유사한 개념
Generic 형식 제약 조건
Generic type T가 가져야 하는 조건 명시, new(), IComparable, 인터페이스, 기본 클래스 지정, 참조형, 값형, 관리되지 않는 형 등
같은 assembly 내부에서는 public, 외부에서는 private
LinkedList는 이중 연결, List는 단일 연결
public class MyClass : IComparer
{
public int Compare(Object x, Object y) { ... }
}
C++에서 operator<() 재정의를 통해 Custom class의 Sort알고리즘을 지원하는 것과 유사한 방식
interface IInterface
{
ReturnType FuncName(Parameter a, ...);
}
함수의 선언부만 작성하면 됨
Custom class에서 Sort() 사용 가능
Queue : Deque()시 객체 반환하고 바로 제거
Stack : Pop()시 객체 반환하고 바로 제거
중복키 저장 시 ArgumentException
없는 키 접근 시 KeyNotFoundException
키의 오름차순 순으로 키-값 쌍 저장
내부적으로 key, Value값을 저장하는 Object 배열 2개 유지
새 Key가 들어오면 이진탐색을 통해 Index에 저장
Index를 이용해서 Keys, Values에 접근
Heap구조일 듯
Property와 유사한 방법(this 사용)으로 Instance 내의 데이터에 접근하는 방법
C++에서의 operator[] 재정의
function pointer
delegate ReturnType DelegateName(paramater, ...);
delegate (parameter, ...) { ... } // anonymous delegate
anonymous delegate는 c++의 lambda와 구조가 유사함(c#의 lambda와는 조금 다른 듯)
Func delegate : 결과를 반환하는 메소드를 참조하기 위해 미리 정의된 delegate, 매개변수 최대 16개까지 가능, Generic을 사용해서 가장 마지막에 있는 매개변수를 Return값으로 사용
Action delegate : 반환값이 없는 메소드를 참조하기 위해 미리 정의된 delegate, 매개변수 최대 16개까지 가능, Genereic 사용
Generic은 가변인자는 불가능한 듯
(type, ...) => { ... };
각 Element에 대해 Parameter Method를 수행한 결과를 Array로 만들어 반환하는 함수인 듯
c#에서도 가능한 것으로 보이는데 Property로 지정된 애들만 가능한지는 모르겠음
익명 객체 생성도 가능한 듯
Func, Action같이 미리 정의된 delegate
1개의 매개변수와 bool return인 delegate
Array나 List에서 Method의 조건을 걸기 위해 사용(Find 등)
Language INtegrated Query
SQL 언어를 C#에 도입한 것
LINQ가 사용될 객체는 IEnumerable을 구현해야 함