CodeGym /Các khóa học /C# SELF /Cấu trúc chương trình điển hình trong C#

Cấu trúc chương trình điển hình trong C#

C# SELF
Mức độ, Bài học
Có sẵn

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
}
Khai báo class trong C#

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
}
Ví dụ về field (biến) trong class

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;
    }
}
Ví dụ về method trong class

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(":)");
}
Top-level statement: code không cần class

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(":)");
    }
}
Compiler chuyển top-level statement thành class như thế nào

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.

2
Nhiệm vụ
C# SELF, mức độ, bài học
Đã khóa
Tạo một class đơn giản với trường và phương thức
Tạo một class đơn giản với trường và phương thức
2
Nhiệm vụ
C# SELF, mức độ, bài học
Đã khóa
Lớp với nhiều phương thức
Lớp với nhiều phương thức
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION