Series C# hay ho: C# đã tiến hóa như thế nào (Những thay đổi của C# từ 1.0 cho tới 5.0)

Chẳng là gần đây, công ty mình vưa tuyển thêm 1 anh Technical Lead. Đợt mình hỏi ông leader phỏng vấn thế nào, ổng nhận xét “Kiến thức base C# khá vững, nói được những thay đổi của C# từ 1.0 tới 5.0”. Mặc dù mình chỉ là junior dev nhưng mình thấy phần này không khó, do lỡ tìm hiểu rồi nên post bài này chia sẻ cho các bạn luôn. Kiến thức ở bài viết này khá có ích, thích hợp đem đi chém gió, phỏng vấn hoặc hù mem mới.

Lưu ý nhỏ: C# thường được release với .NET. C# là ngôn ngữ lập trình, còn .NET là 1 thư viện/framework (Ta có VB.NET, F#, ASP.NET v…v). Trong phạm vi bài viết, mình chỉ đề cập vê những thay đổi trong bản thân ngôn ngữ C#, không giới thiệu những công nghệ mới qua từng phiên bản .NET như EF, WIF, v…v nhé. Có một số phần mình đã viết rồi, chỉ dẫn link tới bài viết cũ nhé.

mindMap

1. C# 2 – Giải quyết vấn đề từ C# 1

a. Kiểu dữ liệu Generic: Nói đơn giản, nó là kiểu <T> mà các bạn hay dùng ấy. Với generic, code trở nên gọn gàng sáng sủa hơn, ta cũng có thể tái sử dụng function cho nhiều kiểu dữ liệu khác nhau.

b. Kiểu dữ liệu nullable: Trong nhiều trường hợp, ta cần thể hiện giá trị null với kiểu dữ liệu tham trị như int, double v…v. Với 1 số ngôn ngữ khác, ta phải chuyển nó sang dạng tham chiếu như  Interger, Double. Với C# 2, ta có thể dùng kiểu nullable, khai báo bằng cách: Nullable<int> hoặc int?. Rất ngắn gọn và đơn giản/

c. Delegate: Đã có thể sử dụng anonymous delegate, viết ngắn học hơn so với C# 1

d. Partial class: Một partial class có thể được khai báo trong nhiều file khác nhau. Partial class được áp dụng trong Winform, class tự sinh từ Entity Framework, giúp ta dễ dàng thêm chức năng vào form, class mà không cần động tới những class được C# tự tạo ra.

d. Iterator (IEnumerable): Để duyệt từng phần tử một mảng, ta có thể dùng hàm foreach. Iterator là một cực hình khi implement trong C# 1. Với từ khóa yield, việc tạo Iterator trong C# đã trở nên rất dễ ràng

linq

2. C# 3 – Cải tiến trong data access, LINQ chào đời

a. Một số thay đổi nhỏ trong compiler: Một số thay đổi nho nhỏ được C# thêm vào, giúp việc code trở nên nhẹ nhàng hơn, bạn có thể xem code của các thay đổi này trong 2 phần đầu của series C# hay ho.

  • Tự implement getter, setter thông qua properties
  • Khởi tại object và array một cách dễ dàng
  • Khai báo bằng biến var
  • Anonymous class

b. Lambda expression: Lambda expression giúp việc viết delegate trở nên dễ dàng hơn rất nhiều. Mình đã viết 1 bài khá kĩ về thứ này, bạn có thể xem lại nếu quên.

c. Extension method: Bạn đọc lại phần mình viết về extension method ở bài viết trong link nhé.

d. Query và LINQ: Đây là phiên bản C# đầu tiên LINQ ra đời, đã làm võ lâm dậy sóng, giang hồ chấn động. Những cải tiến như var, anonymous class, lamda expression, extension method đều là nền tảng để xây dựng LINQ.

e. Ứng dụng khác của LINQ: Ban đầu, LINQ được dùng để filter, sort v…v các object trong bộ nhớ. Nhờ sự trợ giúp của expression tree, LINQ đã có 1 số ứng dụng khác như: LINQ to SQL (Dịch lambda expression thành SQL, query trực tiếp dưới database), LINQ to XML, Parellel LINQ.

c-evolution

3. C# 4 – Thay đổi nho nhỏ

a. Cải tiến nhỏ giúp code ngắn gọn hơn: Thêm named arguments  và optional parameters

b. Lập trình với dynamic: Đây là thay đổi lớn nhất và đáng chú ý nhất trong C#. Với dynamic, giờ đây ta có thể làm việc với các object từ những ngôn ngữ dynamic như Python, Ruby, Javascript, … Nghe có vẻ hoành tráng nhưng mình thấy dynamic ít được xài trong cái project thật, không hiểu vì sao :(.

4. C# 5 – Giảm thiểu đau đầu khi code bất đồng bộ

Điểm nhấn lớn nhất của phiên bản C# 5 này chính là 2 từ khóa async và await. Nhiều function trong C# đã được hỗ trợ call async và await. Phần này thì mình xin thú thật là mình cũng đọc rồi, nhưng do chưa áp dụng nhiều nên không hiểu mấy, có lẽ khi mình hiểu sâu hơn về vấn đề này, mình sẽ viết 1 bài hướng dẫn. (Ngày xưa mấy cái như event, delegate mình cũng ngu vậy ấy, về sau gặp trong code nhiều là tự động khá lên à.)

 

 

Cảm ơn sự quan tâm theo dõi của các bạn đọc trong thời gian qua. Trong 4 tháng mình đạt được mốc 1000 view, nhưng mới quảng cáo trên fb 1 ngày đã được hơn 1000 view, ngày hôm sau được ~400 view nữa :'(, sức mạnh của quảng cáo thật là to lớn quá a :'(.

11 thoughts on “Series C# hay ho: C# đã tiến hóa như thế nào (Những thay đổi của C# từ 1.0 cho tới 5.0)”

  1. Mình đang follow theo những bài viết C# hay ho của bác đây. Tôi là lập trình viên .NET, và chỉ .NET thôi. (các platform, và language khác như java, php, js, c/c++ tôi cũng làm qua mấy projects rồi nhưng vẫn thích .NET hơn tất cả)

    Like

  2. Nhờ cái Asyn Await Task trong C# 5.0 mà mình đỡ mất công với đám Thread, Threadpool, và đỡ mất công vik một đống event kèm theo (mình chỉ mới tập làm quen với bất đồng bộ). So sánh cách làm kiểu cũ và kiểu mới đúng là một trời một vực. Ơn trời !!!

    Like

  3. Chào bạn, tôi chưa từng học lập trình (ngoại trừ pascal học năm 1989), bây giờ đang tính xem vài thứ lập trình với cơ sở dữ liệu lớn, có người nói theo R ( The R Foundation for Statistical Computing
    ) có người nói C#, theo kinh nghiệm của bạn thì NTN, cho xin tư vấn. TKS

    Like

    1. Làm việc với CSDL thì nên học SQL nhé bạn (Hadoop dùng để xử lý Big Data cũng sử dụng SQL).
      Nếu bạn làm việc cho phòng lab, với mục đích nghiên cứu thì R và MATLAB là lựa chọn phù hợp. Java và C# thích hợp cho các ứng dụng enterprise hơn.

      Like

  4. Đúng là bạn chỉ nói về sự thay đổi trong C# , nếu nói về sự thay đổi trong framework thì nó khá nhiều.
    Một trong số đó là Managed Extensibility Framework (MEF) : code theo kiến trúc này cực kì abstract (không thấy bất cứ keywork new nào trong source code), nếu bạn có thời gian thì viết một bài về nó cho mọi người bổ sung thêm những thứ “hay ho” khác.

    Like

  5. Đến h vẫn chưa có bài về async await vầy anh, tìm hiểu hoài ko hiểu 😦

    Like

Leave a reply to Phạm Huy Hoàng Cancel reply