C# Cơ bản .NET Core §1 Cài đặt, chương trình C# đầu tiên §2 Biến, kiểu dữ liệu và nhập/xuất §3 Toán tử số học và gán §4 So sánh, logic và lệnh if, switch §5 Vòng lặp for, while §6 Phương thức - Method §7 Chuyển số thành chữ §8 Phương thức - Delegate §9 Lớp - Class §10 Namespace §11 Partial, Nested §12 Kiểu giá trị, tham chiếu §13 Kiểu vô danh và dynamic §14 Biểu thức lambda §15 Event §16 Hàm hủy - Quá tải toán tử - thành viên tĩnh - indexer §17 null và nullable §18 Mảng §19 Chuỗi ký tự §20 Tính kế thừa §21 Phương thức khởi tạo §22 Tính đa hình - abstract - interface §23 Struct và Enum §24 Ngoại lệ Exeption §25 IDisposable - using §26 File cơ bản §27 FileStream §28 Generic §29 Collection - List §30 SortedList §31 Queue / Stack §32 Linkedlist §33 Dictionary - HashSet §34 Phương thức mở rộng §35 ObservableCollection §36 LINQ §37 (Multithreading) async - bất đồng bộ §38 Type §39 Attribute Annotation §40 DI Dependency Injection §41 (Multithreading) Parallel §42 Thư viện lớp §43 (Networking) HttpClient §44 (Networking) HttpMessageHandler §45 (Networking) HttpListener §46 (Networking) Tcp TcpListenerr/TcpClient §47 (ADO.NET) SqlConnection §48 (ADO.NET) SqlCommand §49 (EF Core) Tổng quan §50 (EF Core) Tạo Model §51 (EF Core) Fluent API §52 (EF Core) Query §53 (EF Core) Scaffold §54 (EF Core) Migration §55 (ASP.NET CORE) Hello World! §56 (ASP.NET CORE) Middleware §57 (ASP.NET CORE) Map - Request - Response §58 (ASP.NET CORE) IServiceCollection - MapWhen §59 (ASP.NET CORE) Session - ISession §60 (ASP.NET CORE) Configuration §61 (ASP.NET CORE) Gửi Mail §62 (ASP.NET CORE) SASS/SCSS §63 (ASP.NET CORE) LibMan §64 (ASP.NET RAZOR) Khởi tạo và Route §65 (ASP.NET RAZOR) Cú pháp Razor §66 (ASP.NET RAZOR) Layout trong ASP.NET Core §67 (ASP.NET RAZOR) Partial §68 (ASP.NET RAZOR) ViewComponent §69 (ASP.NET RAZOR) TagHelper §70 (ASP.NET RAZOR) PageModel §71 (ASP.NET RAZOR) Model Binding §72 (ASP.NET RAZOR) HTML Form, Validation §73 (ASP.NET RAZOR) Upload File §74 (ASP.NET RAZOR) HtmlHelper §75 (ASP.NET RAZOR) Entity Framework §76 (ASP.NET RAZOR) Paging §77 (ASP.NET RAZOR) Identity (1) - Register, Login, Logout §78 (ASP.NET RAZOR) Identity (2) Lockout, Reset Password §79 (ASP.NET RAZOR) Identity (3) Google Login §80 (ASP.NET RAZOR) Identity (4) Facebook Login §81 (ASP.NET RAZOR) Identity (5) profile, password, email ... §82 (ASP.NET RAZOR) Identity (6) Role §83 (ASP.NET RAZOR) Identity (7) Role-based Authorization §84 (ASP.NET RAZOR) Identity (8) RoleClaim §85 (ASP.NET RAZOR) Identity (9) Authorization Handler §86 (ASP.NET RAZOR) IAuthorizationService §87 (ASP.NET MVC) Controller - View §88 (ASP.NET MVC) Route §89 (ASP.NET MVC) EF, Identity §90 (ASP.NET MVC) Binding, Validation §91 (ASP.NET MVC) Xây dựng Website(1) §92 (ASP.NET MVC) Xây dựng Website(2) §93 (ASP.NET MVC) Xây dựng Website(3) §94 (ASP.NET MVC) Xây dựng Website(4) §95 (ASP.NET MVC) Giỏ hàng - Cart (5) §96 (ASP.NET MVC) elFinder (5) §97 (ASP.NET MVC) SB Admin (6) §98 (ASP.NET MVC) Kestrel, publish

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 structure

.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.

net structure

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
Kiem tra .NET Core

Ứ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.

CSharp VS

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

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):

CSharp VS
Bạn có thể mở một thư mục dự án, trong đó có thư mục .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ó.

CSharp VS

Để 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ình
  • args 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
CSharp VS

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 trong tasks.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
CSharp VS

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

Mã nguồn C# được viết vào các file có phần mở rộng .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.

CSharp Document

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

Đăng ký theo dõi ủng hộ kênh