CodeGym /Các khóa học /C# SELF /Cú pháp khai báo class và cấu trúc của nó

Cú pháp khai báo class và cấu trúc của nó

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

1. Cấu trúc tổng quát khi khai báo class

Ok, tưởng tượng thế này: class trong C# giống như bản vẽ thiết kế một tòa nhà. Trong bản vẽ, mình mô tả có bao nhiêu phòng, màu tường gì, cửa và cửa sổ ở đâu. Còn trong class — là object có những thuộc tính gì (ví dụ: tên, tuổi) và nó làm được gì (kiểu như "chào hỏi", "xin lương").

Khai báo class luôn có ba phần chính:

  1. Modifier truy cập (public, private, internal, protected) — ai có thể dùng class này. Để đơn giản, giờ mình dùng public cho class "thấy" ở mọi nơi.
  2. Từ khóa class — để compiler biết là mình đang mô tả class.
  3. Tên class — viết hoa chữ cái đầu, theo convention.
  4. Phần thân class trong dấu ngoặc nhọn — ở đây mình mô tả hết mọi thứ của class: field, property, method.

Sơ đồ sẽ như này:

public class TênClass
{
    // Ở đây sẽ có field, property và method của class
}
Khai báo class trong C#

Ví dụ: Class sinh viên

public class Student
{
    // Field (biến thuộc về object)
    public string Name;
    public int Age;
}

Hiện tại class này giống như cái hộp rỗng: mình mô tả sinh viên có tên và tuổi, nhưng chưa dạy nó làm gì cả.

2. Field của class (fields)

Field — là biến thuộc về object của class. Ví dụ, mỗi sinh viên phải có tên riêng và tuổi riêng — nên mình mô tả chúng là field:

public class Student
{
    public string Name;
    public int Age;
}

Giờ khi bạn tạo object kiểu Student, mỗi object sẽ có tên và tuổi riêng.

Ví dụ tạo object:

Student sasha = new Student();
sasha.Name = "Sasha";
sasha.Age = 20;

Ở đây mình tạo object sasha, rồi gán giá trị cho field của nó. Cách này dùng cho khởi đầu đơn giản nhất (về constructor mình sẽ nói kỹ ở bài sau).

3. Method của class (functions)

Method — là "động từ" của object, tức là hành vi của nó. Những gì nó làm được. Ví dụ, sinh viên có thể chào hỏi. Để làm vậy, mình mô tả method trong class:

public class Student
{
    public string Name;
    public int Age;

    public void SayHello()
    {
        Console.WriteLine($"Chào, mình tên là {Name}, mình {Age} tuổi!");
    }
}

Giờ mỗi sinh viên đều có thể "chào hỏi" — và sẽ dùng tên, tuổi riêng của mình.

Ví dụ dùng method:

Student sasha = new Student();
sasha.Name = "Sasha";
sasha.Age = 20;
sasha.SayHello(); // In ra: Chào, mình tên là Sasha, mình 20 tuổi!

4. Property của class (properties)

Property — là "field thông minh", có thể thêm logic khi đọc hoặc ghi giá trị. Trong C# hiện đại, property dùng nhiều hơn field vì nó cho nhiều quyền kiểm soát và linh hoạt hơn. Kiểu như điện: tưởng đơn giản mà làm được đủ trò.


public class Student
{
    public string Name { get; set; }
    public int Age { get; set; }
}
Khai báo property của class

Ở đây get; set; tự động tạo field, nhưng sau này bạn có thể thêm logic khi thay đổi giá trị. Đối với người dùng class, property nhìn gần giống field.

Ví dụ:

Student katya = new Student();
katya.Name = "Katya";
katya.Age = 18;
Console.WriteLine(katya.Name); // Katya

Chi tiết về property — sẽ có ở các bài sau :P

5. Comment

Chủ đề hơi chán nhưng quan trọng! Như mọi code khác, trong class bạn nên viết comment để giải thích tại sao cần field hoặc method nào đó:

public class Student
{
    // Tên sinh viên
    public string Name { get; set; }
    
    // Tuổi sinh viên (tính theo năm)
    public int Age { get; set; }

    // Sinh viên chào hỏi
    public void SayHello()
    {
        Console.WriteLine($"Chào, mình tên là {Name}, mình {Age} tuổi!");
    }
}

Viết comment giúp code dễ đọc và không bị lạc khi dự án lớn.

6. Modifier truy cập

Modifier truy cập — giống như cửa có nhiều loại khóa. Nó quyết định ai và từ đâu có thể truy cập thành viên của class. Các modifier chính:

  • public: truy cập ở mọi nơi (mặc định mình dùng cái này).
  • private: chỉ truy cập bên trong class này.
  • internal: truy cập trong cùng assembly (project, library).
  • protected: truy cập trong class và class con.

Ví dụ field bị ẩn khỏi bên ngoài:

public class Student
{
    private int age; // Chỉ bên trong Student
    public string Name { get; set; }

    public void SetAge(int value)
    {
        if (value > 0)
            age = value;
    }

    public int GetAge()
    {
        return age;
    }
}

Lúc mới học, mọi người hay khai báo public cho dễ, nhưng thực tế thì không nên: một số chi tiết nên ẩn đi.

7. Thành viên static của class

Đôi khi class có dữ liệu hoặc method không thuộc về object riêng lẻ, mà thuộc về cả class. Đó là thành viên static (static members).

Ví dụ: mình muốn đếm tổng số sinh viên.

public class Student
{
    public static int StudentsCount = 0;

    public string Name { get; set; }
    public int Age { get; set; }
}

Truy cập thành viên static qua tên class:

Student.StudentsCount = 0;

Mỗi object có property/field riêng, còn static thì dùng chung. Trong ví dụ trên, nếu có 10 sinh viên, mỗi người có Name riêng, nhưng StudentsCount là chung.

8. Ví dụ: Class sinh viên hoàn chỉnh (có method)

Tổng hợp lại, mình tạo class sinh viên đầy đủ, chuẩn chỉnh:

public class Student
{
    // Static đếm số sinh viên - dùng chung cho tất cả
    public static int Count = 0;

    // Tên và tuổi - property
    public string Name { get; set; }
    public int Age { get; set; }

    // Constructor (về constructor — bài sau sẽ nói kỹ)
    public Student(string name, int age)
    {
        Name = name;
        Age = age;
        Count++; // Mỗi lần tạo object thì tăng biến đếm
    }

    // Method chào hỏi
    public void SayHello()
    {
        Console.WriteLine($"Chào! Mình là {Name}. Mình {Age} tuổi.");
    }
}

Dùng trong chương trình chính:

class Program
{
    static void Main()
    {
        Student sasha = new Student("Sasha", 20);
        Student katya = new Student("Katya", 22);

        sasha.SayHello();
        katya.SayHello();

        Console.WriteLine($"Tổng số sinh viên: {Student.Count}");
    }
}

9. Tổ chức code: một file = một class

Trong .NET, mỗi class public nên để ở file riêng, tên file trùng với tên class. Ví dụ:

Student.cs
|
|__ public class Student

Còn file chính (Program.cs) — là entry point và code chính. Cách này giúp dễ tìm code khi dự án nhiều class.

10. Lỗi thường gặp khi làm việc với class và object

Lỗi số 1: quên dấu ngoặc nhọn hoặc đặt sai chỗ.
Compiler sẽ báo lỗi ngay, nhưng không phải lúc nào cũng rõ lý do. Đặc biệt khi ngoặc bị lệch trong đoạn code dài — tìm ra chỗ sai cũng mệt phết.

Lỗi số 2: khai báo hai class trùng tên trong cùng namespace.
Compiler sẽ không cho qua đâu. Mà cũng tốt — chứ không thì bạn cũng chẳng biết đang dùng class nào.

Lỗi số 3: lỡ đặt field trùng tên với property.
Dễ gây rối khi truy cập thành viên class. Ngay cả dev lâu năm cũng hay nhức đầu: "Mình đang gọi field hay property nhỉ?"

Lỗi số 4: không ghi modifier truy cập.
Mặc định class sẽ là internal, nếu bạn viết library thì có thể bị giới hạn truy cập ngoài ý muốn.

Lỗi số 5: truy cập thành viên static qua instance.
Nếu viết student.Count thay vì Student.Count, compiler có thể không cấm, nhưng sẽ gây hiểu nhầm. Như kiểu bạn nói Count thuộc về sinh viên cụ thể, thực ra là của tất cả.

Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION