1. Chương trình — như một văn phòng đầy phòng ban
Khi mới học lập trình, bạn sẽ nghĩ chỉ cần viết code từng dòng là chạy được hết. Nhưng khi chương trình phức tạp hơn chút, mọi thứ bắt đầu rối tung: cái gì ở đâu, viết để làm gì, muốn sửa một dòng thì tìm nó ở đâu?..
Vì vậy C#, giống như hầu hết các ngôn ngữ hiện đại, cho phép ta “xếp code lên kệ”, để lúc nào cũng hiểu chương trình làm gì và tìm đúng chỗ cần sửa rất nhanh.
Hãy tưởng tượng một công ty. Có phòng nhân sự, kế toán, IT, logistics v.v. Mỗi phòng có trách nhiệm riêng, nhân viên riêng, nhiệm vụ riêng.
Trong chương trình C#, mỗi “phòng ban” như vậy là một class. Một class lo về user, class khác tính toán, class khác nữa xử lý file.
Đây là cấu trúc điển hình của một project đơn giản:
- Program.cs — văn phòng chính: đây là “điểm bắt đầu”, nơi mọi thứ khởi động.
- User.cs — phòng lưu trữ và xử lý dữ liệu user.
- Calculator.cs — phòng tính toán.
- FileHelper.cs — chuyên gia về file.
Ngay cả chương trình nhỏ nhất cũng thường có ít nhất một class. Còn project lớn thì như “tòa nhà chọc trời” với hàng trăm class!
2. Class — là hộp đựng công cụ
C# là ngôn ngữ hướng đối tượng và mọi thứ đều là object. Loại object được gọi là class.
Class giống như một cái hộp hoặc tủ, nơi ta để những thứ cần thiết: biến, method, property. Hãy tưởng tượng một hộp ghi “Búa”: bên trong chỉ có công cụ liên quan đến búa thôi.
class Example
{
// Ở đây sẽ là công cụ của chúng ta: biến, method, property
}
Class thường chứa biến và function. Trong C#, biến trong class thường gọi là field, còn function là method. Nhưng ý nghĩa thì vẫn vậy thôi.
Nhớ đoạn code đầu tiên của chúng ta không?
Console.WriteLine("Chào mọi người!");
string name = Console.ReadLine();
Trong đoạn code này có cả class lẫn method:
- Console — là class chứa các method (function) để làm việc với console.
- WriteLine — là method của class Console, dùng để in text ra màn hình.
- ReadLine — là method của class Console, dùng để đọc input từ bàn phím.
Lập trình thực chất là viết các class và method của mình, rồi gọi method của các class khác.
3. Field (biến) của class — là bộ nhớ của nó
Bên trong class có thể lưu biến (thường gọi là “field”). Nó giống như ô nhớ, nơi ta cất dữ liệu.
class Counter
{
int value; // field — ở đây sẽ lưu giá trị hiện tại của Counter
}
Field cho phép class nhớ thứ gì đó giữa các lần gọi method khác nhau. Ví dụ, đếm số lần bấm nút.
Field có thể có bao nhiêu cũng được. Ví dụ:
class User
{
int id; // số định danh duy nhất của user
string name; // tên user
int age; // tuổi
string adress; // địa chỉ
User[] children; // con cái
}
4. Method — hành động mà class có thể làm
Method là “kỹ năng” của class. Nếu class là nhân viên, thì method là kỹ năng: nó làm được gì.
- Method có thể in gì đó ra màn hình.
- Tính tổng hai số.
- Nhận dữ liệu “đầu vào” và trả về kết quả.
Cấu trúc của method:
- Kiểu trả về (ví dụ void — nếu không trả về gì, hoặc int — nếu trả về số)
- Tên method (ví dụ Print)
- Tham số trong ngoặc (có thể để trống)
- Ngoặc nhọn { ... } — thân method
class Printer
{
public void PrintHello()
{
Console.WriteLine("Hello!");
}
public int Add(int a, int b)
{
return a + b;
}
}
Chi tiết về method và các vấn đề liên quan sẽ được nói kỹ hơn trong các bài sau.
5. Property — biến thông minh
Property (property) giống như “biến nâng cấp”: không chỉ lưu giá trị mà còn có thể làm gì đó khi lấy hoặc thay đổi giá trị.
Ví dụ ngoài đời: bạn không thể tự ý thay đổi lương của nhân viên — kế toán sẽ kiểm tra xem có đúng không. Property cũng có thể “kiểm tra” dữ liệu như vậy:
class Person
{
private int age; // biến (field) của class
public int Age // property Age. lưu dữ liệu trong biến age của class.
{
get { return age; } // method get - gọi khi ai đó lấy giá trị Age
set // method Set - gọi khi ai đó thay đổi giá trị Age
{
if (value >= 0)
age = value;
}
}
}
Code trong method set sẽ không cho đặt tuổi âm. Chi tiết về property sẽ học kỹ hơn ở các bài sau.
6. Modifier truy cập
Trong C# bạn có thể xác định phần nào của class được truy cập từ class khác, phần nào chỉ dùng nội bộ. Để làm vậy dùng modifier truy cập. Nếu trước tên field, method hoặc class có từ khóa public, thì có thể truy cập từ bất cứ đâu trong chương trình.
Nếu trước tên field, method hoặc class có từ khóa private, thì chỉ truy cập được từ chính class đó. Class khác sẽ không thấy field hoặc method này. Như thể nó không tồn tại luôn.
- public — ai cũng thấy. Method và property này có thể dùng từ class khác.
- private — chỉ thấy bên trong class. Đây là chi tiết nội bộ, không nên cho bên ngoài dùng.
class Demo
{
public int OpenValue; // thấy được từ ngoài
private int secretValue; // chỉ thấy bên trong
public void ShowOpen() { Console.WriteLine(OpenValue); }
private void HideSecret() { Console.WriteLine(secretValue); }
}
Quy tắc vàng: field thường để private, còn chỉ “lộ” ra ngoài những method và property cần thiết (public).
7. Một class thực tế trông như thế nào
Đây là ví dụ “hoàn chỉnh” — mini-calculator:
class Calculator
{
private int result; // field để lưu kết quả
public int Result
{
get { return result; }
private set { result = value; } // chỉ truy cập được bên trong class
}
public void Add(int a, int b)
{
result = a + b;
}
public void Clear()
{
result = 0;
}
}
Cách làm này xuất hiện gần như ở mọi chương trình C# hiện đại!
8. Top-level statements
Thực ra trong C# toàn bộ code luôn nằm trong class. Class là đơn vị nhỏ nhất của chương trình. Có thể có nhiều class, nhưng ít nhất phải có một.
Khoan đã, thế còn đoạn code vừa viết, đâu có class nào?!
Đó là một trong những tính năng mới của C#: bạn có thể viết code không cần class, C#-compiler sẽ tự chuyển nó thành class.
Giả sử bạn có code như này trong Program.cs:
// code của bạn
WriteSmile();
WriteSmile();
WriteSmile();
//function tự viết
void WriteSmile()
{
Console.WriteLine(":)");
}
C# compiler sẽ chuyển nó thành như này:
using System;
class Program
{
static void Main() // code của bạn
{
WriteSmile();
WriteSmile();
WriteSmile();
}
static void WriteSmile() //function tự viết
{
Console.WriteLine(":)");
}
}
Nếu bạn mới hiểu được một nửa bài giảng cũng không sao: quan trọng là bạn nắm được ý chính. Các bài sau sẽ giải thích từng bước mọi thứ đã nói ở đây.
GO TO FULL VERSION