C# là một trong những ngôn ngữ hoạt động trên một nền tảng đặc biệt gọi là “.NET Framework”. Chương trình viết bằng C# (và các ngôn ngữ .NET khác) có quy trình dịch và cách thực thi khác biệt với các ứng dụng windows “bình thường”. Sự khác biệt này có ảnh hưởng lớn đến cách nghĩ và cách code trong C#.
Do vậy, các tài liệu về lập trình C# hầu như luôn phải giới thiệu về .NET Framework trước khi bắt đầu nói về chính ngôn ngữ.
Bài học này sẽ giúp bạn hiểu .NET Framework là gì, sự khác biệt về quy trình biên dịch – thực thi ứng dụng trong .NET framework với các loại ứng dụng truyền thống. Cuối cùng bạn sẽ làm quen với một số đặc điểm của ngôn ngữ lập trình C#.
.NET framework là gì?
Với câu hỏi “.NET Framework là gì” bạn sẽ nhận được hai cầu trả lời: (1) .NET Framework là một bộ thư viện lớp; (2) .NET Framework là một môi trường thực thi của ứng dụng.
.NET framework là một bộ thư viện lớp
.NET framework chứa một bộ thư viện rất lớn chứa các loại công cụ khác nhau giúp người lập trình xử lý được hầu hết các công việc thường gặp trong quá trình phát triển ứng dụng. Vì vậy, lập trình ứng dụng với .NET framework thường có hiệu quả rất cao và thời gian làm việc ngắn hơn.
Người lập trình có thể sử dụng bất kỳ ngôn ngữ nào mà trình biên dịch của nó có thể dịch mã nguồn sang một dạng mã trung gian theo yêu cầu của .NET framework. Visual C#, Visual Basic.NET, Visual C++.NET, và F# là bốn ngôn ngữ chính thức được Microsoft phát triển để hoạt động trên .NET framework.
Ngoài ra còn một số ngôn ngữ khác không do Microsoft phát triển cũng được thiết kế hướng tới nền tảng .NET như Delphi.NET, Oxygence (hai ngôn ngữ có cấu trúc cú pháp tương tự Pascal), IronPython (phiên bản của Python dịch sang .NET framework), v.v..
Các ngôn ngữ hướng tới .NET framework ngoài việc có thể truy cập tới bộ thư viện còn có thể sử dụng thư viện người dùng viết bằng các ngôn ngữ .NET khác. Ví dụ, người phát triển ứng dụng trên C# hoàn toàn có thể sử dụng thư viện do người khác phát triển trên Visual Basic.
.NET framework là một môi trường thực thi cho ứng dụng
Chương trình viết cho .NET framework không thực thi trực tiếp trong môi trường hệ điều hành mà thực thi trong khuôn khổ của chương trình CLR và được quản lý bởi chương trình này.
Vì thực thi trong một môi trường riêng khép kín và được quản lý chặt chẽ, chương trình .NET có thể tránh được nhiều lỗi thường gặp trong quá trình phát triển ứng dụng.
Do môi trường thực thi của các ứng dụng .NET cung cấp nhiều tính năng cao cấp (như quản lý bộ lý, xử lý ngoại lệ, v.v.), việc lập trình ứng dụng trên .NET framework đơn giản hơn.
Việc học lập trình với một ngôn ngữ bất kỳ của .NET framework có giá trị rất lớn khi ta có thể sử dụng nó để viết hầu như bất kỳ loại ứng dụng nào, có thể viết ứng dụng không chỉ ứng dụng chạy trên Windows mà còn có thể cho các nền tảng khác.
Một số công nghệ trong .NET Framework
Dưới đây là một số công nghệ phổ biến trong .NET framework
- Console: xây dựng ứng dụng với giao diện dòng lệnh;
- Windows Forms: xây dựng ứng dụng desktop (giao diện đồ họa) cho windows;
- Windows Presentation Foundation: công nghệ mới xây dựng ứng dụng desktop (giao diện đồ họa) cho windows;
- ASP.NET: nền tảng để phát triển các ứng dụng web chạy trong chương trình máy chủ IIS, bao gồm ASP.NET Web Forms, ASP.NET MVC, ASP.NET Web API;
- ADO.NET và Entity Framework: công nghệ cho phép chương trình kết nối và sử dụng cơ sở dữ liệu quan hệ (SQL Server, MySQL, v.v.);
- Windows Communications Foundation: công nghệ cho phép phát triển ứng dụng mạng hướng dịch vụ (Service Oriented Application, SOA).
Hiện nay bạn có thể sẽ nghe thấy cả .NET Core, hay .NET 5 (sắp ra mắt). Lưu ý rằng, mặc dù đều có chung phần “.NET” nhưng chúng là những nền tảng khác nhau. Để phân biệt, người ta thường nói rõ “.NET Framework” hay “.NET Core”. Trong đó, .NET Framework là nền tảng thuần túy cho windows, .NET Core hoạt động đa nền tảng (trong đó có cả windows), .NET 5.0 là nền tảng hợp nhất trong tương lai.
Ngôn ngữ C# sử dụng để lập trình cho tất cả các nền tảng này.
Cài đặt .NET framework trên windows
Trên hệ điều hành Windows, .NET framework có thể cài đặt trên phiên bản Windows 98 và mới hơn, hoặc Windows NT 4.0 về sau. Các phiên bản cũ hơn của Windows không cho phép cài đặt .NET framework. Các hệ điều hành mới như Windows 10 đều mặc định cài đặt .NET và có thể tự động cập nhật phiên bản mới.
Các chương trình viết cho .NET framework chỉ có thể hoạt động nếu trên hệ điều hành có cài đặt phiên bản tương đương hoặc mới hơn của .NET (so với phiên bản sử dụng cho quá trình phát triển ứng dụng).
Phiên bản mới nhất của .NET Framework hiện nay là 4.7. Nếu bạn đang dùng Windows 10, hoặc bạn đã cài đặt Visual Studio, máy tính của bạn đã có sẵn .NET bản mới nhất.
Biên dịch mã nguồn và thực thi chương trình trong .NET framework
.NET framework và các ngôn ngữ hỗ trợ nền tảng này hoạt động không giống như các chương trình “bình thường” khác trong Windows.
Biên dịch và thực thi chương trình native
Các file mã nguồn của chương trình viết bằng một ngôn ngữ lập trình nào đó sẽ được chương trình dịch của ngôn ngữ đó chuyển thành file chương trình chứa mã máy (native code/instruction). Giai đoạn này gọi là Compile time.
Khi người dùng chạy ứng dụng, file chương trình được hệ điều hành tải vào bộ nhớ và bắt đầu thực hiện các lệnh chứa trong đó. Hệ điều hành đóng vai trò môi trường hoạt động và là người quản lý việc thực thi của ứng dụng. Giai đoạn tải và thực thi các lệnh gọi là Runtime.
Loại chương trình được hệ điều hành tải, thực thi và quản lý trực tiếp như vậy thường được gọi là ứng dụng native. Ứng dụng native trong windows được tạo ra với các ngôn ngữ như C/C++, Pascal, Delphi, Visual basic, v.v..
Biên dịch và thực thi chương trình trong .NET framework
Trong .NET framework, mã nguồn viết bằng các ngôn ngữ lập trình không được biên dịch trực tiếp thành mã máy để thực thi (trực tiếp trong hệ điều hành) như các chương trình viết bằng C/C++ hay Pascal/Delphi.

Mã nguồn viết bằng một ngôn ngữ .NET (C#, Visual basic .NET) được trình biên dịch của ngôn ngữ đó dịch thành tệp mã đặc biệt gọi là tệp mã CIL (Common Intermediate Language). CIL là một loại ngôn ngữ trung gian đặc biệt được Microsoft tạo ra cho nền tảng .NET.
CIL, trước đây còn được gọi là MSIL (Microsoft Intermediate Language), cũng chính là một ngôn ngữ lập trình. Đây là ngôn ngữ cấp thấp nhất mà người lập trình còn có thể đọc được code. Mã CIL cũng thường được gọi là bytecode.
Ở giai đoạn Runtime, một chương trình dịch đặc biệt có tên gọi là JIT (Just-in-time compiler) đọc và dịch tiếp mã CIL thành mã máy để thực thi. Quá trình thực thi này được kiểm soát bởi một chương trình đặc biệt gọi là CLR (Common Language Runtime).
Như vậy có thể hình dung (gần đúng) rằng, chương trình viết bằng một ngôn ngữ .NET sẽ chạy bên trong một chương trình khác (CLR) và bị chương trình CLR này kiểm soát. Cả CIL và CLR đều là các thành phần của một hệ thống tổng thể gọi là Common Language Intermediate (CLI).
Do việc biên dịch tất cả các ngôn ngữ .NET đều tạo ra CIL nên, ví dụ, một object tạo ra bằng Visual Basic .NET có thể được truy xuất từ code viết trên C#.
Ngôn ngữ lập trình C#
C# là một ngôn ngữ lập trình được phát triển riêng biệt cho .NET framework với phiên bản C# 1.0 ra đời vào năm 2002 cùng với .NET framework 1.0. Phiên bản hiện tại của C# (ở thời điểm viết tài liệu này) là 7.
Một số đặc điểm của ngôn ngữ C#
Ngôn ngữ C# chịu ảnh hưởng của nhiều ngôn ngữ lập trình khác, trong đó có C++, Eiffel, Java. Lập trình viên đã làm việc với các ngôn ngữ như C/C++ hay Java sẽ rất dễ dàng tiếp thu C#.
C# được thiết kế theo hướng đơn giản, hiện đại, đa chức năng và hỗ trợ hầu hết các nguyên tắc lập trình hiện có:
- định kiểu mạnh (strong typing),
- hướng mệnh lệnh (imperative programming),
- hướng khai báo (declarative programming),
- hướng hàm (functional programming),
- hướng đối tượng (object-oriented programming),
- hướng thành phần (component-oriented programming),
- lập trình tổng quát (generic programming).
Bạn không nhất thiết phải hiểu hết các thuật ngữ “kỳ lạ” trên. Ở đây chỉ liệt kê ra nhằm chứng minh sự mạnh mẽ và phong phú của ngôn ngữ C#. Tuy nhiên, một số nguyên tắc trong số đó có ảnh hưởng rất lớn và trực tiếp đến việc học lập trình C#.
Trình biên dịch C#
Để dịch mã nguồn C# thành chương trình cần sử dụng một trình biên dịch (compiler) cho ngôn ngữ này.
Hiện nay đang tồn tại một số trình biên dịch C# khác nhau:
- Microsoft Visual C# của Microsoft được xem là chương trình “chính thống”;
- Mono và trình biên dịch C# mã nguồn mở (tương đương với .NET 3.5, đồng thời cũng không hỗ trợ toàn bộ các class của .NET framework);
- DotGNU và trình biên dịch C# mã mở (tương đương với .NET 2.0);
- Trình biên dịch C# của Microsoft’s Rotor project (chỉ hỗ trợ tới C# 2.0 Windows XP).
Nếu bạn đã cài đặt sẵn Visual Studio, bạn không cần để ý đến trình biên dịch C# nữa. Mọi thứ đã setup sẵn sàng!
Một số điểm cần lưu ý
C# có cú pháp, các cấu trúc điều khiển, một số kiểu dữ liệu cơ sở, v.v. rất giống C/C++ và Java. Nếu bạn có xuất phát điểm từ các ngôn ngữ này có thể dễ dàng nắm được các thành phần cơ bản của C#. Tuy nhiên đừng để sự tương đồng này đánh lừa bạn.
C# là ngôn ngữ hướng đối tượng 100%. Tức là mọi thứ trong C# đều là class. Do đó bạn sẽ không bao giờ nghe thấy các khái niệm như hàm toàn cục, biến toàn cục trong C#. Đặc điểm này giống với Java. Nếu xuất phát từ C/C++ bạn nên lưu ý vấn đề này.
Khi học lập trình C#, bạn đồng thời phải học thư viện .NET, mà trước hết là các thành phần cơ bản của thư viện này. Sau đó bạn phải đầu tư thời gian cho các kỹ thuật nâng cao của .NET và C#. Cuối cùng bạn nên lựa chọn và đi sâu vào các công nghệ xây dựng trên nền tảng .NET.
Do đó, đừng suy nghĩ kiểu đốt cháy giai đoạn, muốn nhảy ngay vào các công nghệ (như winform, asp.net). Nắm càng chắc C# và .NET, bạn càng dễ dàng tiếp cận các công nghệ. Nếu nhảy ngay vào công nghệ, bạn chỉ học được cái vỏ chứ không thể tiến xa được.
Kết luận
Bài học này đã trình bày sơ lược về .NET Framework, các đặc điểm của nền tảng này, cũng như giới thiệu về ngôn ngữ lập trình C#.
Cũng lưu ý rằng, bài học này chỉ nêu ra những vấn đề rất cơ bản, vắn tắt, sơ lược về .NET và C# để giúp bạn nắm được tư tưởng và khái niệm chung. Còn rất nhiều nội dung mà trong khuôn khổ một bài học ngắn không thể trình bày được.
+ Nếu bạn thấy site hữu ích, trước khi rời đi hãy giúp đỡ site bằng một hành động nhỏ để site có thể phát triển và phục vụ bạn tốt hơn.
+ Nếu bạn thấy bài viết hữu ích, hãy giúp chia sẻ tới mọi người.
+ Nếu có thắc mắc hoặc cần trao đổi thêm, mời bạn viết trong phần thảo luận cuối trang.
Cảm ơn bạn!
Add cho em hỏi là .NET Framework hàng năm có các bản phiên bản mới .
làm sao để biết có những mã nào không được khuyến khích sử dụng trong tượng lai nữa ạ
Câu hỏi của bạn có thể có vài câu trả lời: (1) Ở cấp độ code (cấp thấp nhất): Intellisense (trình nhắc code của Visual Studio) sẽ gạch chân phần code (class, method, property) với màu green. Khi bạn trỏ chuột vào nó sẽ hiện ra dòng thông báo “Deprecated”, cùng với lý do và code thay thế nên sử dụng. (2) Ở cấp độ giải pháp: lấy ví dụ, khi bạn học lập trình bất đồng bộ sẽ có nhiều giải pháp khác nhau, như mô hình TPL (Task Parallel Library) hoặc APM (Asynchronous Programming Model). Trong đó, APM… Đọc tiếp »
Em cảm ơn chị ạ. Thông tin rất hữu ích.
Cảm ơn bạn đã ghé thăm site.
Ad ơi cho em hỏi là em là dân kinh tế, bây giờ em muốn đi theo lập trình .NET core thì em cần phải học C# căn bản và sau đó em phải học lên thêm những gì nữa ạ. Em cảm ơn
Chào bạn!
Với câu hỏi của bạn thì mình hơi khó trả lời. Vấn đề nằm ở chỗ mục đích học .NET core của bạn là gì. Hiện nay .NET Core hỗ trợ phát triển ứng dụng web (asp.net core), ứng dụng desktop (windows forms, wpf), ứng dụng console đa nền tảng. Lựa chọn học tiếp những gì là do mục đích của bạn quyết định. Ngoại trừ ứng dụng console, người ta thường chỉ chọn học một trong số các công nghệ được hỗ trợ chứ ít khi học hết tất cả.
Cảm ơn Mai Chi nhé mình mới đến học về lập trình ở Tuổi 40 liệu có hơi quá tuổi không nhỉ
Chào anh! Theo em biết thì tuổi nào bắt đầu học lập trình cũng được ạ. Tuy nhiên bắt đầu học muộn ở tuổi 40 thì sẽ hơi vất vả hơn một chút. Bạn bè em ở khoảng tuổi này đều dần từ bỏ làm code trực tiếp, dù đã gắn bó gần 20 năm rồi. Ở tuổi này mắt bắt đầu kém (khó mà đọc hàng nghìn dòng code chi chít chữ), khả năng tập trung kém hơn (khó ngồi liền tù tì cả ngày để đọc / viết), khó thức đêm (ai làm code cũng đều cày đêm… Đọc tiếp »
Cảm ơn Mai Chi nhé! Chia sẻ của em rất trân thành tất nhiên học không bao giờ là muộn nếu mình thấy cần. Tuổi này đa số học gọi là có nhưng mình chưa bao giờ nghĩ học cho có để lãng phí cả. Mai Chi có cách học nào khác như trên Web này để trực quan hơn nữa không? Mình rất tâm đắc chia sẻ tận gốc của Mai Chi về cách học và phương hướng cho người lập trình
Kinh nghiệm em thấy rằng, việc học lập trình tốt nhất là thông qua việc tự đọc sách, kết hợp thêm việc tham khảo blog/video. (1) Nhìn chung lập trình rất ít tính trực quan, ngoại trừ một số việc như setup môi trường/project, sử dụng công cụ hỗ trợ. Còn lại đều có tính trừu tượng cao. Do vậy việc đọc sách + tư duy + tưởng tượng sẽ tốt hơn về lâu dài. (2) Học qua video mặc dù trực quan, cảm giác dễ học nhưng chỉ phù hợp khi học một số công nghệ trên ngọn, khi… Đọc tiếp »
Ok a thay đổi cách bắt đầu xem vì cứ tư duy nhiều và chịu khó kèm tưởng tượng tốt chắc chắn sẽ được.
ở cty mình các anh làm lead team toàn tầm 40 tuổi đổ lên, code thì vẫn như trâu, trình độ code thì tương đương với các chuyên gia của Ấn độ, tiếng Anh thì nói như tiếng Việt, mình chả thấy a team lead nào dưới 40 tuổi cả, như bạn nói ở trên chắc là bạn chưa bao h làm ở 1 cty lớn tầm cỡ 7000 nhân viên trở lên
Nếu trình bạn khủng như vậy thì vào đọc bài viết cho beginner làm gì nhỉ. Tâc giả bài viết đã nói là làm giảng viên mà.
chào ad, theo ad thì hiện nay lập trình winform hay loại lập trình nào đang dần phổ biến ạ.!
Chào bạn!
Windows forms là một công nghệ cho ứng dụng desktop đã khá cao tuổi. Nhìn chung việc phát triển ứng dụng desktop giờ không được ưa chuộng bằng ứng dụng web và mobile.
Bạn có thể đọc bài blog này để hiểu rõ hơn các loại công nghệ trên nền tảng .net và xu hướng của chúng: https://tuhocict.com/cong-nghe-microsoft-2-winforms-wpf-asp-net-core/
Xin cám ơn tác giả đã tạo ra 1 nguồn học tập C# rất tuyệt vời cho người mới học. Mong website ngày càng phát triển hơn :)))
ad ơi cho e hỏi làm sao để bắt đầu học C# từ con số 0 ạ. Em cảm ơn.
Mình không rõ ý bạn “từ con số 0” nghĩa là gì. Nếu bạn chưa từng học lập trình bao giờ thì việc học C# sẽ khá khó khăn, vì C# lấy lập trình hướng đối tượng làm chủ đạo, nghĩa là nó yêu cầu bạn phải có các khái niệm về lập trình cơ bản trước, sau đó là hiểu các khái niệm cơ bản của lập trình hướng đối tượng. Ngay khi bắt đầu với C#, dù là chương trình Hello world, cũng đã phải xây dựng class và method.
ad cho e hỏi, e chưa từng học lập trình bao giờ, ở trên ad có nói tới các khái niệm về lập trình cơ bản yêu cầu phải có trước khi học C#, vậy ad có thể nói cụ thể các khái niệm lập trình cơ bản đó là gì? e có thể học ở đâu, hay trong cuốn sách nào…?được không ạ. Mong được ad chia sẻ cho người bắt đầu học lập trình như e ạ.
cùng câu hỏi, ad hay ace nào có câu trả lời thì share cho mình với nhé.
Học lập trình cơ bản thường sẽ học những khái niệm chung nhất, như cú pháp ngôn ngữ, biến, hằng, kiểu dữ liệu cơ sở, cấu trúc điều khiển, chương trình con, một số thư viện cơ sở của nền tảng. Lập trình cơ bản thường sẽ học sau khi học cách vẽ lưu đồ thuật toán để thể hiện ý tưởng về cách giải quyết một vấn đề. Bạn có thể đọc thêm bài viết này Cách tự học lập trình hiệu quả cho người mới bắt đầu | Tự học ICT (tuhocict.com). Ví dụ, khi học về biến,… Đọc tiếp »
cho mk xin lộ trình bắt đầu học .NET . Mk đã có kiến thức front end cơ bản.
Nếu bạn đã có kiến thức lập trình căn bản + lập trình hướng đối tượng thì bộ tài liệu này phù hợp đấy ạ. Bộ tài liệu này cũng được sử dụng để dạy ở trường đại học cho sinh viên chuyên ngành.
Bộ tài liệu này dùng để giảng dạy cho sinh viên chuyên ngành thật hả bạn.
Vâng, nó đã được sử dụng 2 năm nay rồi. Bạn thấy nó nặng quá hay nhẹ quá ạ? :)
Cảm ơn bạn admin đã viết bài hướng dẫn về C# nhiều.
Ngoài ra hiện tại đã và đang có .NET 6, mong đợi được bạn chia sẻ nhiều hơn
Mới bắt đầu về C# và định hướng học ASP .NET Web API, Entity Framework thì có sách nào bằng tiếng Anh hay không ạ?
Cảm ơn các bạn đã có một sản phẩm rất tuyêt vời giúp ích rất nhiều cho cộng đồng những người đam mê lập trình mà chưa có điều kiện học những lớp, trường chính quy