Giới thiệu về C# và .NET FRAMEWORK
Giới thiệu về .NET Framework
.NET Framework (.NET thường gọi dot net) là một nền tảng phần mềm được phát triển bởi Microsoft. Phiên bản 1.0 giới thiệu năm 2002 - phiên bản hiện tại (2019) là .NET 4.x ( xem lịch sử các phiên bản .NET tại .NET version history), ban đầu .NET chỉ hỗ trợ trên các hệ điều hành Windows và mã nguồn .NET là đóng.
Năm 2016, song song với .NET Framework, Microsoft phát hành .NET Core 1.0 chạy đa nền tảng (Windows, Linux, macOS) và đặc biệt nó là mã nguồn mở (mã nguồn dotnet github) - cộng đồng cùng phát triển dưới dự dẫn dắt của .NET Foundation, đến thời điểm 2020 đang là .NET Core 3.1, nó gần như đã có hầu hết các API của .NET Framework và các gói trên NugGet hầu hết cũng có cho .NET Core, các ứng dụng chạy trên .NET Core có hiệu suất cao Performance Improvements in .NET Core
Theo như thông tin tại Giới thiệu .NET 5.0, bạn có thể lưu ý mấy điểm chính sau:
- .NET Core 3.0 đã có số lượng API gần tương thích với .NET Framework 4.8
- Sẽ không có phiên bản tiếp theo của .NET Framework trong tương lại (sẽ chỉ dừng lại ở 4.8 - 4.x)
- Phiên bản tiếp theo của .NET Core là 5.0 (bỏ qua 4.x) và đây là tương lai của .NET
.NET Core 5.0 (nguồn mở, đa nền tảng) chính là tương lại của nền tảng .NET và từ bản 5.0 không gọi là .NET Core mà chỉ là .NET
.NET bao gồm thành phần CLR (Common Language Runtime) và các thư viện lớp Framework Class Library (FCL).
Một chương trình viết cho .NET thì được thực thi (chạy) trong một môi trường do .NET tạo ra (phần mềm), nó có tên là Common Language Runtime (CLR) - có thể coi nó như một máy ảo cung cấp các dịch vụ về an ninh phần mềm (security), quản lý bộ nhớ (memory management), xử lý lỗi ngoại lệ (exception handling). Vì code viết cho .NET sẽ chạy trọng CLR nên code đó gọi là "managed code" (code được quản lý bởi .NET).
.NET bao gồm tập các thư viện lập trình lớn, và những thư viện này hỗ trợ việc xây dựng các chương trình phần mềm như lập trình giao diện; truy cập, kết nối cơ sở dữ liệu; ứng dụng web; các giải thuật, cấu trúc dữ liệu; giao tiếp mạng... CLR cùng với bộ thư viện này là 2 thành phần chính của.NET framework.
.NET framework đơn giản hóa việc viết ứng dụng bằng cách cung cấp nhiều thành phần được thiết kế sẵn, người lập trình chỉ cần học cách sử dụng và tùy theo sự sáng tạo mà gắn kết các thành phần đó lại với nhau. Nhiều công cụ được tạo ra để hỗ trợ xây dựng ứng dụng.NET, và IDE (Integrated Developement Environment) được phát triển và hỗ trợ bởi chính Microsoft là Visual Studio.
Thư viện lớp (FCL) là một tập hợp các lớp (class), giao diện (interface), kiểu giá trị, chúng cho phép bạn sử dụng để thi hành rất nhiều tác vụ trong lập trình: ví dụ như xử lý dữ liệu, truy cập file, làm việc với văn bản ... Từ thư viện lớp cung cấp sẵn này, các chương trình C# phát triển và mở rộng để thêm vào các chức năng khác nhau.
Giới thiệu về ngôn ngữ lập trình C#
C# là một ngôn ngữ lập trình hướng đối tượng rất tường minh, rõ ràng. C# được dùng để phát triển nhiều loại ứng dụng (Ứng dụng Windows, Linux, macOS, Web ...) có hiệu năng cao và bảo mật thi hành trên nền tảng .NET
Microsoft tạo ra .NET Framework năm 2002, đi cùng với nó ngôn ngữ lập trình mới được giới thiệu là C# 1.0, dùng để phát triển các ứng dụng chạy trên nền tảng .NET Framework.
Song song với quá trình phát triển của .NET Framework, các phiên bản của C# cũng đều đặn được giới thiệu bổ sung dần các tính năng, phiên bản hiện tại là C# 9.0 (2020)
Các tính năng qua từng phiên bản bạn có thể xem tại: C# History
Một số đặc điểm của ngôn ngữ lập trình C#
- Cú pháp đơn giản - giống Java
- Các phương thức, thuộc tính bắt buộc khai báo trong lớp
- Biến được khai báo với kiểu dữ liệu
- Các đối tượng không thể được giải phóng tường minh
- ...
Những bài viết này sử dụng .NET Core để học C# nhằm có thể sử dụng Windows, macOS, Ubuntu để viết code C# và chạy ứng dụng.
Cài đặt .Net Core SDK
Để phát triển ứng dụng .NET trước tiên cần cài đặt .NET Core SDK, hay vào Download .NET, tải về .NET Core SDK phù hợp với hệ điều hành của mình và tiến hành cài đặt.
Sau khi cài đặt, thực hiện lệnh tại terminal để kiểm tra:
dotnet --version
Ứng dụng C# đầu tiên với Visual Studio Code
Để tập trung vào các khía cạnh cốt lõi của C#, sẽ thực hành trên các ứng dụng loại C# Console (.NET Core) (loại ứng dụng dòng lệnh không sử dụng giao diện đồ họa GUI). Sau đó sẽ nâng cao dần với các loại ứng dụng như ASP.NET, WPF ...
IDE (môi trường viết, biên dịch, debug) để phát triển ứng dụng C# bạn có thể chọn là Visual Studio (Windows, macOS) hoặc Visual Studio Code (Windows, macOS, Linux - Ubuntu)
Sử dụng Visual Studio
Các bài học sẽ tập trung sử dụng Visual Studio Code,
tuy nhiên Visual Studio rất mạnh và nhiều người cũng quen thuộc với nó.
Trong Windows và macOS bạn có thể tải và cài đặt bản miễn phí
Visual Studio Community
để phát triển dự án C# - Net Core.
Để tạo dự án C# .NET Core mới, chọn File > New Project ...
- chọn NET Core, các thiết lập và điền tên ứng dụng ví dụ
CSHelloworld
như hình sau.
Dự án mới tạo ra, bạn sẽ sửa code sau - để chạy ứng dụng nhấn CTRL + F5 hoặc F5 để Debug ...
Sử dụng Visual Studio Code
Với mục đích có thể viết ứng dụng trên cả Windows, Linux, macOS bạn có thể tải về và sử dụng Visual Studio Code viết ứng dụng .NET
Có Visual Studio Code rồi, để nó hỗ trợ C#
và dự án viết cho .NET Core cần cài đặt các Extension sau (bấm vào biểu tượng Extension và gõ tên extension để tìm):
- OmniSharp
- C# for Visual Studio Code (powered by OmniSharp)
- Code Runner
- C# Extensions
- Paste JSON as Code
.vscode
, tại đây bạn có thể để file
có tên extensions.json
, có chứa tên các Extension - tự động gợi ý cài đặt khi mở dự án.
Bạn có thể lấy file này tại:
extensions.json
Tạo ứng dụng CS001_HelloWorld trên VSC
Tiến hành tạo ứng dụng console CS001_HelloWorld
in ra lời chào trên màn hình.
Bước 1) Tạo một thư mục dự án đặt tên thư mục là CS001_HelloWorld
,
từ dòng lệnh chuyển vào thư mục đó (lệnh cd). Rồi gõ lệnh khởi tạo dự án C# .NET Core kiểu console
dotnet new console
Sau lệnh này nó sẽ tạo ra các file mã nguồn, cấu hình, thư mục cần thiết trong CS001_HelloWorld, để khởi tạo một dự án C# .NET Core mới.
Khi mở thư mục dự án bằng Visual Studio Code (VSC) với lệnh code
(lệnh này có là do thiết lập VSC), chọn menu View > Command Pallet ...
gõ vào .NET - từ menu đổ xuống chọn mục:
NET: Generate Assets for Build and Debug
- để VSC thêm vào dự án file cấu hình build và chạy ứng dụng nếu chưa có.
Để khi nhấn CTRL + F5 hay F5 chạy chương trình nó nhận tương tác
tốt từ terminal thay có thể thay đổi cấu hình khởi chạy dự án của VSC.
Hãy mở file ./vscode/launch.json
, tìm đến dòng "console": "internalTerminal"
ãy thay bằng "console": "integratedTerminal"
hoặc "console": "externalTerminal"
(mở của sổ Terminal mới khi chay)
Bước 2) Mở thư mực CS001_HelloWorld bằng Visual Studio Code,
trong thư mục đó có sẵn đoạn code file ví dụ mẫu có tên Program.cs
,
mở file đó ra và sửa đoạn mã như hình dưới.
using System; namespace CS001_HelloWorld { class Program { static void Main(string[] args) { Console.WriteLine("Xin chào C# NET CORE!"); } } }
Một số thành phần cơ bản của ứng dụng code C#
Cấu trúc chi tiết của một ứng dụng C# giải thích dần ở các ví dụ tiếp theo, đối với đoạn code đơn giản trên có thể giải thích nhanh gồm:
Lệnh, khối lệnh (statement) C#
Các khối lệnh C# cho biết nó cần thực hiện một tác vụ nào đó. Nó có thể là một
dòng code kết thúc với dấu ;
hoặc nhiều dòng code gộp thành khối nằm trong
dấu {}
int a; // câu lệnh { // bên trong khối lệnh }
Phương thức Main
Một ứng dụng C# Console phải có một phương thức Main, phương thức này là điểm mồi bắt đầu
và kết thúc ứng dụng. Đây là phương thức tính static
nằm trong một lớp (class
ví dụ trên là lớp có tên Program
).
Giải thích nhanh các thành phần cho hàm Main ở trên (chi tiết ở các phần sau)
static
cho biết hàm tên Main không thuộc về đối tượng nào cả (nó thuộc về lớp)void
cho biết hàm Main không trả về giá trị (ngoài ra bạn có thể khai bao nếu cần hàm trả về giá trị nhưint
là số nguyên)Main
tên hàm, đặt tên là Main vì nó là điểm khởi đầu của chương trìnhargs
là tham số truyền vào hàm Main, nó là một mảng các chuỗi (string[]
), tham số này truyền vào khi ở dòng lệnh
Lớp - Class
Chi tiết về lớp nói ở các phần về hướng đối tượng, C# là ngôn ngữ thuần hướng đối tượng
bạn cần xây dựng ra các lớp đề từ đó tạo ra các đối tượng của chương trình, để khai báo một
một lớp bạn dụng từ khóa class
, như trên tạo ra một lớp là Program
,
trong lớp này có hàm Main (chú ý chỉ được phép có một hàm Main từ tất cả các lớp)
Namespace
Namespace là cách tổ chức code, tránh sung đột về tên lớp, dễ quản lý. Bạn có thể tạo
ra một namespace bằng từ khóa namespace
, trong namespace bạn có thể khai báo
các lớp thuộc namespace đó. Ví dụ trên, namespace tạo ra là có tên CS001_HelloWorld
,
trong nó có lớp Program
Bạn có thể sử dụng từ khóa using
ở đầu file code, để cho biết sẽ sử dụng
các lớp thuộc một namespace nào đó. Ở ví dụ trên using System;
cho biết
sẽ sử dụng các lớp thuộc System (ví dụ lớp Console)
Console.WriteLine("Xin chào C# NET CORE!");
Gọi phương thức WriteLine của lớp Console, lớp này thuộc System, có chức năng in dữ liệu ra terminal
Biên dịch, chạy chương trình
Để chạy chương trình (mở cửa sổ Terminal trong VSC:
CTRL + ~
, đang ở thư mục CS001_HelloWorld) gõ:
dotnet run
Ngoài ra cũng có thể:
- Nhấn
F5
để bắt đầu Debug - Nhấn
CTRL + F5
để chạy chương trình (không Debug) - Chọn menu
Terminal > Run Task ...
để thi hành build ứng dụng theo các cấu hình thiết lập trongtasks.json
nhưbuild
,publish
,watch
- Build thì gõ lệnh
dotnet build
Ví dụ khi chọn Terminal > Run Task ...
, chọn tiếp publish
thì VSC sẽ build
ứng dụng kết quả lưu ở thư mục CS001_HelloWorld/bin/Debug/netcoreapp3.1/publish/
- đây là kết quả để có thể phân phối ứng dụng. Hoặc gõ lệnh
dotnet publish
Trong thư mục kết quả build của ví dụ trên, có được file CS001_HelloWorld.dll
,
khi phân phối để chạy ứng dụng có thể gõ
dotnet CS001_HelloWorld.dll
Như vậy đã có một ứng dụng C# NET Core đơn giản, nó có thể chạy trên Windows, Linux, macOS miễn là hệ thống đó có cài đặt .NET Core
Mã nguồn: CS001_HelloWorld (git) hoặc CS001_HelloWorld (source code)
Chi tiết để Publish một ứng dụng xem trong bài viết Publish ứng dụng C# NET Core
.cs
, bạn có thể tạo tùy ý số lượng file
mã nguồn .cs
trong thư mục dự án, khi biên dịch nó sẽ biên dịch tất cả các file này.
Ghi chú trong C#
Các ghi chú comment
là các dòng chữ được ghi chép trực tiếp vào văn bản code, các comment bỏ qua tri chương trình chạy (thông dịch). Bạn có thể ghi chú trên một dòng và ghi chú nhiều dòng
Ghi chú một dòng
Là dòng ghi chú chỉ viết trên một dòng, nội dung ghi chú bắt đầu từ ký hiệu //
cho đến hết dòng. Bạn có thể đặt toàn bộ ghi chú này trên một dòng riêng biệt hay có thể đặt nối tiếp vào câu lệnh, đại lượng ...
using System; namespace CS001_HelloWorld { class Program // Đây là một ghi chú 1 dòng, đặt ngay sau lệnh C# { static void Main(string[] args) { // Đây là một dòng ghi chú 1 dòng riêng biệt - dòng này không ảnh hưởng đến code Console.WriteLine("Xin chào C# NET CORE!"); } } }
Ghi chú trên nhiều dòng
Nếu nội dung ghi chú dài bạn có thể viết nó trên nhiều dòng, mỗi dòng bắt đầu bằng //
- tuy nhiên để nhanh chóng
bạn có thể biên tập nội dung ghi chú nhiều dòng, nội dung đó bắt đầu bằng /*
và kết thúc bằng */
using System; namespace CS001_HelloWorld { class Program // Đây là một ghi chú 1 dòng, đặt ngay sau lệnh C# { static void Main(string[] args) { // Đây là một dòng ghi chú 1 dòng riêng biệt - dòng này không ảnh hưởng đến code Console.WriteLine("Xin chào C# NET CORE!"); } } }
Tạo C# XML Document
Đây là một loại ghi chú viết theo một cấu trúc quy định - sử nhiều dòng ghi chú 1 dòng với cấu trúc quy định, nhằm hỗ trợ phát sinh Document (hướng dẫn) đến các đối tượng sử dụng (hàm, lớp, tham số ...)
Để hỗ trợ phát sinh C# XML Document hãy cài đặt thêm extension có thên C# XML Documentation Comments
, nếu đang dùng Visual Studio thì không cần cài thêm gì.
Để phát sinh một XML Document cho đối tượng nào đó (hàm, lớp, biến ...) đặt con trỏ trước đối tượng đó và gõ ///
, sau đó bạn chỉ việc cập nhật nội dung theo cấu trúc nó phát sinh
Ví dụ
/// <summary> /// Tính tổng hai số nguyên /// </summary> /// <param name="a">số thứ nhất</param> /// <param name="b">số thứ hai</param> /// <returns>giá trị a + b</returns> static int TongHaiSo(int a, int b) { return a + b; }
Bằng cách tạo ghi chú như vậy, nó sẽ phát sinh Document tham khảo khi bạn sử dụng đối tượng đó, như hình sau - nó xuất hiện Document khi bạn gõ tên hàm.
Khi viết code cần tham khảo Document của hàm, lớp nào đó thì khi gõ tên hàm, lớp xong gõ tổ hợp phím CTRL + SPACE để hiện thị Document