Giới thiệu về C# và Hướng dẫn cài đặt môi trường





Giới thiệu về ngôn ngữ C#

C# (C - sharp) là ngôn ngữ hiện đại, mạnh mẽ do Microsoft phát triển, được dùng để làm ứng dụng desktop (WPF), web (ASP.NET), game (Unity), và nhiều thứ khác..NET (dotnet): Là nền tảng mà code C# của bạn sẽ chạy trên đó. Nó cung cấp các thư viện để bạn làm mọi thứ, từ đọc file, kết nối mạng, đồ hoạ,...Không giống như C++ biên dịch thẳng code của bạn ra mã máy (native code) để chạy trực tiếp trên CPU, khi bạn build một dự án C#, code của bạn sẽ được biên dịch thành một dạng mã trung gian gọi là IL (Intermediate Language). Chính mã IL này, cùng với các metadata của nó, thường được gọi chung là "managed code" (mã được quản lý).Mã này không tự chạy được. Thay vào đó, nó cần một môi trường thực thi chuyên biệt gọi là .NET Runtime. Khi bạn chạy ứng dụng, .NET Runtime (cụ thể là CLR - Common Language Runtime) sẽ "tiếp quản" mã IL này. Nó sử dụng một trình biên dịch Just-In-Time (JIT) để dịch mã IL thành mã máy (native code) ngay tại thời điểm chạy.Vì mọi thứ đều chạy bên trong runtime, nên runtime có thể "quản lý" (manage) tất cả các khía cạnh quan trọng như cấp phát và giải phóng bộ nhớ (Garbage Collection), xử lý ngoại lệ, và đảm bảo an toàn kiểu dữ liệu. Mọi tương tác với "máy thật" đều đi qua lớp bảo vệ an toàn này, giúp bạn giảm thiểu rất nhiều lỗi thường gặp trong C++.Đây là một kiến trúc rất giống với cách Java/Bytecode hoạt động trên máy ảo JVM.





Tải và cài đặt môi trường

Link tải Visual Studio Community: https://visualstudio.microsoft.com/vs/community/


Màn hình chờ cài đặt của Visual studio installer


Chọn Workload là .Net desktop development sau đó bấm install




Màn hình chờ cài đặt hoàn tất



Tốc độ cài đặt sẽ phụ thuộc vào cấu hình máy và tốc độ mạng của bạn.

Cài đặt xong, click mở. Màn hình dưới đây sẽ hiển thị khi bạn mở Visual Studio lần đầu tiên



Chọn Skip and add account later để vào việc chính cho nhanh.



Chọn giao diện sáng tối theo sở thích và nhấn vào Start Visual Studio sẽ tới giao diện chính của VS.

Như vậy, bạn đã hoàn thành việc cài đặt Visual Studio và bộ SDK cho C# rồi

Giao diện chính: Để tạo dự án mới, chọn Create a new project.



Màn hình tiếp theo sẽ đưa ra mẫu các loại dự án bạn muốn phát triển. Vì chúng ta mới học nên sẽ chọn Console app và nhấn vào Next






Chương trình Hello World đầu tiên

Sau khi cài đặt xong workload ở bước trước, tại giao diện chính của Visual Studio, chọn Create a new project.Sau khi cài đặt xong workload ở bước trước, tại giao diện chính của Visual Studio, chọn Create a new project.



Tiếp theo sẽ chọn template, ta sẽ chọn Console App và bấm Next như hình dưới đâyTiếp theo sẽ chọn template, ta sẽ chọn Console App và bấm Next như hình dưới đây



Màn hình tạo console project xuất hiện



Đặt tên cho project, và tiếp tục nhấn next cho đến khi màn hình soạn code xuất hiện






Nhấn nút Run (Hình mũi tên Play màu xanh) hoặc tổ hợp phím Ctrl + F5

Khi cửa sổ dòng lệnh hiện ra với dòng chữ Hello, World! tức là mọi người đã cài đặt thành công, Code C# đã được biên dịch và chạy.




Biến và kiểu dữ liệu

Biến

Trong lập trình, biến dùng để lưu trữ dữ liệu.

Một biến có 3 thứ: tên (để gọi nó), kiểu dữ liệu (loại dữ liệu nó có thể chứa), và giá trị (thứ bên trong nó).

Để khai báo một biến và gán giá trị trong C#, ta sử dụng cú pháp sau:

<kiểu dữ liệu> <tên biến> = <giá trị>;

Ví dụ: int count = 10;

Ở ví dụ, trên:

●    Kiểu dữ liệu: int (kiểu số nguyên)

●    Tên biến: count

●    Giá trị: 10





Các kiểu dữ liệu cơ bản

Ở C#, bạn cần phải khai báo rõ kiểu dữ liệu là gì, bạn không thể gán một biến với kiểu là string sang một biến có kiểu int.

● int dùng để lưu giá trị kiểu số nguyên

Ví dụ: 10, 0, -5, 2025

● double dùng để chứa số thực

Ví dụ: 3.14, -0.5, 9.81

● string dùng để chứa chuỗi văn bản

Ví dụ: “xin chào”, “Nguyễn Văn A” (chuỗi phải nằm trong dấu nháy kép “”)

● bool dùng để chứa dữ liệu đúng/sai (true/false)

Chỉ có thể chứa 2 giá trị true (đúng) và false (sai)




Khai báo và gán giá trị


// Cú pháp: [Kiểu dữ liệu] [Tên biến] = [Giá trị];
// Khai báo 1 biến kiểu int tên là 'tuoi' và gán giá trị 20
int tuoi = 20;
 
// Khai báo biến điểm trung bình kiểu double
double diemTB = 8.5;
// Khai báo biến tên sinh viên
string tenSV = "Nguyễn Văn A";
 
// Khai báo biến kiểm tra xem đã tốt nghiệp chưa
bool daTotNghiep = false;
 
// Bạn có thể thay đổi giá trị của biến
tuoi = 21; // tuổi tăng lên 21
 
// In giá trị của biến ra màn hình
Console.WriteLine(tenSV); // sẽ in ra "Nguyễn Văn A"
Console.WriteLine(tuoi);  // sẽ in ra 21





Toán tử

Toán tử số học

Giống như toán học bình thường, C# cũng có các toán tử: + (cộng), - (trừ), * (nhân), / (chia)

Ngoài ra còn có toán tử % (chia lấy dư), rất hữu dụng trong trường hợp kiểm tra chẵn lẻ

 

int a = 10;
int b = 3;
 
Console.WriteLine(a + b); // In ra 13
Console.WriteLine(a * b); // In ra 30
Console.WriteLine(a / b); // In ra 3 (vì 10 chia 3 lấy phần nguyên là 3)
Console.WriteLine(a % b); // In ra 1 (phần dư)

 





Toán tử so sánh

Dùng để so sánh 2 giá trị. Kết quả luôn luôn là một giá trị bool (true hoặc false).

●    ==: So sánh bằng. (Lưu ý: 2 dấu bằng, 1 dấu bằng là phép gán)

●    !=: So sánh không bằng.

●    >: Lớn hơn.

●    <: Nhỏ hơn.

●    >=: Lớn hơn hoặc bằng.

●    <=: Nhỏ hơn hoặc bằng.

 

int tuoi = 20;

bool kiemTra = (tuoi > 18); // 20 > 18 là đúng

Console.WriteLine(kiemTra); // Sẽ in ra "True"




Toán tử logic

Dùng để kết hợp nhiều điều kiện bool lại với nhau.

●    && (VÀ - AND): Tất cả điều kiện phải là true thì kết quả mới là true.

●    || (HOẶC - OR): Chỉ cần một điều kiện là true thì kết quả là true.

●    ! (PHỦ ĐỊNH - NOT): Lật ngược giá trị bool. (!true thành false, !false thành true).

double diemTB = 8.5;

int hanhKiem = 1; // Giả sử 1 là Tốt, 0 là Khá

 

// Điều kiện học sinh giỏi: Điểm >= 8.0 VÀ Hạnh kiểm == Tốt

bool laHocSinhGioi = (diemTB >= 8.0) && (hanhKiem == 1);

Console.WriteLine(laHocSinhGioi); // Sẽ in ra "True"


 




Câu lệnh rẽ nhánh (if/else, switch/case)

Câu lệnh if ... else (Nếu ... thì ... nếu không thì...)

 

// Yêu cầu người dùng nhập tuổi
Console.Write("Nhap vao so tuoi cua ban: ");
// Console.ReadLine() dùng để đọc 1 dòng chữ người dùng nhập vào
// Convert.ToInt32(...) dùng để đổi dòng chữ đó thành số nguyên (int)
int tuoi = Convert.ToInt32(Console.ReadLine());
 
if (tuoi < 18)
{
   // Khối lệnh này sẽ chạy NẾU (tuoi < 18) là true
   Console.WriteLine("Ban la tre vi thanh nien.");
}
else if (tuoi >= 18 && tuoi <= 60)
{
   // Nếu điều kiện 1 sai, nó sẽ kiểm tra điều kiện này
   Console.WriteLine("Ban dang trong do tuoi lao dong.");
}
else
{
   // Khối lệnh này sẽ chạy NẾU TẤT CẢ các điều kiện trên đều sai
   Console.WriteLine("Ban dang trong do tuoi nghi huu.");
}

 

Ví dụ: Kiểm tra số chẵn/lẻ

 

Console.Write("Nhap vao mot so nguyen: ");
int so = Convert.ToInt32(Console.ReadLine());
 
// Dùng toán tử chia lấy dư
if (so % 2 == 0)
{
   Console.WriteLine("Day la so chan.");
}
else
{
   Console.WriteLine("Day la so le.");
}

 





Câu lệnh switch ... case

Dùng switch...case khi bạn có một biến và muốn kiểm tra nó bằng nhiều giá trị cụ thể. Nó thuận tiện hơn việc dùng quá nhiều else if.

 

Console.Write("Nhap vao mot so tu 1 den 7: ");
int ngayTrongTuan = Convert.ToInt32(Console.ReadLine());
 
switch (ngayTrongTuan)
{
   case 1:
       Console.WriteLine("Chu Nhat");
       break; // 'break' để thoát khỏi switch, bắt buộc phải có
   case 2:
       Console.WriteLine("Thu Hai");
       break;
   case 3:
       Console.WriteLine("Thu Ba");
       break;
   // ... (viết cho các thứ còn lại) ...
   case 7:
       Console.WriteLine("Thu Bay");
       break;
   default:
       // 'default' giống như 'else', khi không có case nào khớp
       Console.WriteLine("So ban nhap khong hop le!");
       break;
}

 


 





Vòng lặp (for, while)

Tại sao cần vòng lặp? Thử tưởng tượng bạn muốn in ra màn hình các số từ 1 đến 100. Bạn sẽ không muốn gõ Console.WriteLine(1);, Console.WriteLine(2);... 100 lần đúng không.

Vòng lặp sẽ giúp bạn.





Vòng lặp for

Sử dụng for khi bạn biết trước số lần lặp (ví dụ: lặp đúng 100 lần, lặp đúng 10 lần...).

Cú pháp của for có 3 phần trong dấu ():




  1. Khởi tạo: int i = 1 (Tạo một biến đếm i bắt đầu từ 1).
  2. Điều kiện: i <= 100 (Vòng lặp sẽ tiếp tục chạy chừng nào i còn nhỏ hơn hoặc bằng 100).
  3. Bước nhảy: i++ (Sau mỗi lần lặp, tăng i lên 1. i++ tương đương i = i + 1).

Ví dụ: In ra các số từ 1 đến 100

 

for (int i = 1; i <= 100; i++)
{
   Console.WriteLine(i);
}

 





Vòng lặp while

Sử dụng while khi bạn lặp cho đến khi một điều kiện nào đó không còn đúng (chưa biết trước sẽ lặp bao nhiêu lần).

Ví dụ: Bạn muốn yêu cầu người dùng nhập một số, nếu họ nhập số 0 thì chương trình mới dừng lại.

 

int soDuocNhap = -1; // Khởi tạo giá trị ban đầu (không phải 0)
 
while (soDuocNhap != 0) // Chừng nào số được nhập còn KHÁC 0
{
   Console.Write("Hay nhap mot so (nhap 0 de thoat): ");
   soDuocNhap = Convert.ToInt32(Console.ReadLine());
   Console.WriteLine("Ban vua nhap so: " + soDuocNhap);
}
 
Console.WriteLine("Tam biet!");

 

Với vòng while, bạn phải cẩn thận. Nếu điều kiện while luôn luôn đúng, chương trình của bạn sẽ chạy mãi không dừng (gọi là vòng lặp vô hạn - infinite loop).






Phương thức (function/method)

Phương thức là gì?

Phương thức (hay còn gọi là hàm) là một khối code được đặt tên, dùng để thực hiện một công việc cụ thể.

Ví dụ: Bạn có một "máy xay sinh tố" (đây là phương thức).

●    Bạn đưa "đầu vào" (tham số): hoa quả, đá, sữa.

●    Nó thực hiện công việc: xay.

●    Nó trả về "đầu ra" (giá trị trả về): một ly sinh tố.

Lợi ích của phương thức là tái sử dụng code. Thay vì viết lại các bước "xay" ở nhiều nơi, bạn chỉ cần gọi tên "máy xay sinh tố".





Cách viết và sử dụng hàm/ phương thức

Hãy mở lại file code Program.cs. Với các phiên bản Visual Studio mới, bạn sẽ thấy code được viết thẳng ra file, trông như thế này:

 

// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");

 

Những dòng code "viết thẳng" này chính là nội dung được tự động đặt bên trong một phương thức Main bị ẩn đi. Cái này được gọi là Top level statements

Bây giờ, làm thế nào để chúng ta tạo ra các hàm mới (như TinhTong) khi không còn class Program như ở các phiên bản cũ? Rất đơn giản, bạn chỉ cần viết thẳng chúng vào file code.

 

// ==========================================================
// Phần này là Top-level statements
// Chúng hoạt động y hệt như đang nằm bên trong hàm Main
//=========================================================
int ketQua = TinhTong(5, 3); // <-- Gọi hàm TinhTong
Console.WriteLine(ketQua);  // Sẽ in ra 8
       
GiaiPhuongTrinhBacNhat(2, -6); // <-- Gọi hàm (a=2, b=-6)
 
// (Chương trình sẽ kết thúc tại đây)
 
// ==========================================================
// Chỗ định nghĩa các hàm mới
// Các hàm này sẽ được C# tự động hiểu là thuộc về Class Program ẩn mà nó tạo ra.
// ==========================================================
 
// 'int' là kiểu dữ liệu trả về (hàm này trả về một số nguyên)
// 'TinhTong' là tên hàm
// '(int a, int b)' là các tham số (đầu vào)
int TinhTong(int a, int b)
{
   int tong = a + b;
   return tong; // 'return' dùng để trả kết quả đầu ra
}
   
// 'void' có nghĩa là hàm này không trả về gì cả
// Nó chỉ thực hiện hành động (in ra màn hình)
void GiaiPhuongTrinhBacNhat(double a, double b)
{
   // Phương trình: ax + b = 0
   if (a == 0)
   {
       if (b == 0)
       {
           Console.WriteLine("Phuong trinh vo so nghiem.");
       }
       else
       {
           Console.WriteLine("Phuong trinh vo nghiem.");
       }
   }
   else
   {
       double nghiem = -b / a;
       Console.WriteLine("Phuong trinh co nghiem x = " + nghiem);
   }
}

 

Kết quả chạy chương trình: