Generic — C# vs TypeScript
Học Generic sâu — khái niệm, constraint, variance, so sánh reified (C#) vs erased (TS).
Generic là gì?
Parametric polymorphism — viết code làm việc với nhiều type mà không sacrifice type safety.
Ví dụ đơn giản — function identity trả về đúng giá trị truyền vào:
// Không generic — phải viết cho từng kiểu
public int IdentityInt(int x) => x;
public string IdentityString(string x) => x;
// ... vô tận
// Generic — 1 lần cho mọi kiểu
public T Identity<T>(T x) => x;
Identity(42); // T = int
Identity("hello"); // T = string
Identity(new User()); // T = User
Generic là 1 trong 3 dạng polymorphism:
- Subtype (overriding) —
Animal a = new Dog(). - Ad-hoc (overloading) — cùng tên, signature khác.
- Parametric (generic) — function/type làm việc với nhiều type.
Lộ trình section
| Trang | Nội dung |
|---|---|
| 1. Khái niệm & cú pháp | Generic function, class, interface — cú pháp C# + TS song song |
| 2. Constraint & Variance | where T : ..., T extends ..., covariance / contravariance |
| 3. C# vs TypeScript | Reified (runtime info) vs Erased (compile-only) — implication thực tế |
| 4. Câu hỏi phỏng vấn | 35+ Q&A Generic cho fresher/junior |
Vì sao Generic quan trọng?
Type safety
Compiler bắt lỗi sớm.
List<int> không nhận string.Code reuse
1 implementation cho mọi type — không duplicate.
Performance (C#)
C# generic không boxing với value type.
List<int> lưu int thật, không phải object.Self-documenting
Repository<T> đọc dễ hơn nhiều Repository rồi guess type qua return.Bắt đầu: Khái niệm & cú pháp.