C# - Cấu trúc: Hướng dẫn cho người mới bắt đầu
Xin chào các bạnfuture nhà phát triển C#! Hôm nay, chúng ta sẽ cùng lặn vào thế giới fascinante của các cấu trúc trong C#. Đừng lo lắng nếu bạn là người mới bắt đầu lập trình - tôi sẽ là người hướng dẫn thân thiện của bạn trong hành trình này, giải thích mọi thứ từng bước. Vậy, chúng ta hãy bắt đầu!
Cấu trúc là gì?
Trước khi chúng ta nhảy vào chi tiết, hãy hiểu cấu trúc là gì. Trong C#, một cấu trúc (thường được viết tắt là "struct") là một loại giá trị có thể chứa các thành viên dữ liệu và phương thức khác nhau. Hãy tưởng tượng nó như một容器 có thể giữ các loại thông tin khác nhau cùng nhau.
Hãy tưởng tượng bạn đang chuẩn bị balo cho chuyến đi bộ đường dài. Bạn có thể có các ngăn khác nhau cho chai nước, snack, bản đồ và la bàn. Tương tự, một cấu trúc trong C# cho phép bạn nhóm các dữ liệu liên quan lại với nhau trong một đơn vị duy nhất.
Định nghĩa một cấu trúc
Bây giờ, hãy xem cách chúng ta có thể tạo một cấu trúc trong C#. Cú pháp cơ bản trông như thế này:
struct TênCấuTrúc
{
// Các thành viên dữ liệu và phương thức ở đây
}
Hãy tạo một cấu trúc đơn giản để đại diện cho một điểm trong không gian 2D:
struct Điểm
{
public int X;
public int Y;
}
Trong ví dụ này, chúng ta đã định nghĩa một cấu trúc叫做 Điểm
với hai thành viên nguyên thủy, X
và Y
. Những này đại diện cho tọa độ của một điểm trên mặt phẳng 2D.
Sử dụng cấu trúc của chúng ta
Bây giờ chúng ta đã định nghĩa cấu trúc Điểm
, hãy xem cách chúng ta có thể sử dụng nó:
Điểm điểmCủaTôi;
điểmCủaTôi.X = 10;
điểmCủaTôi.Y = 20;
Console.WriteLine($"Điểm ở ({điểmCủaTôi.X}, {điểmCủaTôi.Y})");
Mã này tạo một Điểm
mới, đặt giá trị của X
và Y
, và sau đó in chúng ra. Khi bạn chạy mã này, bạn sẽ thấy:
Điểm ở (10, 20)
Có phải không tuyệt vời không? Chúng ta vừa tạo ra một loại tùy chỉnh của riêng mình và sử dụng nó trong chương trình của chúng ta!
Tính năng của các cấu trúc C
Bây giờ chúng ta đã có feet ướt, hãy khám phá một số tính năng chính của các cấu trúc trong C#.
1. Loại giá trị
Cấu trúc là loại giá trị, có nghĩa là chúng được lưu trữ trực tiếp trên stack. Điều này làm cho chúng hiệu quả cho các cấu trúc dữ liệu nhỏ. Khi bạn gán một cấu trúc cho một biến mới hoặc truyền nó đến một phương thức, một bản sao của toàn bộ cấu trúc được tạo ra.
2. Không thể kế thừa
Khác với các lớp, cấu trúc không thể kế thừa từ các cấu trúc hoặc lớp khác (trừ khi từ System.ValueType
, từ đó tất cả các cấu trúc ngầm inheritor).
3. Có thể thực hiện các giao diện
Mặc dù cấu trúc không thể kế thừa, chúng có thể thực hiện các giao diện. Điều này cho phép một số灵活性 trong thiết kế.
4. Có thể có các constructor
Cấu trúc có thể có các constructor, nhưng chúng phải khởi tạo tất cả các trường của cấu trúc.
Hãy thay đổi cấu trúc Điểm
của chúng ta để bao gồm một constructor:
struct Điểm
{
public int X;
public int Y;
public Điểm(int x, int y)
{
X = x;
Y = y;
}
}
Bây giờ chúng ta có thể tạo một Điểm
như thế này:
Điểm điểmCủaTôi = new Điểm(10, 20);
Console.WriteLine($"Điểm ở ({điểmCủaTôi.X}, {điểmCủaTôi.Y})");
5. Có thể có các phương thức
Cấu trúc cũng có thể chứa các phương thức. Hãy thêm một phương thức để tính khoảng cách từ điểm của chúng ta đến gốc (0,0):
struct Điểm
{
public int X;
public int Y;
public Điểm(int x, int y)
{
X = x;
Y = y;
}
public double KhoảngCáchĐếnGốc()
{
return Math.Sqrt(X*X + Y*Y);
}
}
Bây giờ chúng ta có thể sử dụng phương thức này:
Điểm điểmCủaTôi = new Điểm(3, 4);
Console.WriteLine($"Khoảng cách đến gốc: {điểmCủaTôi.KhoảngCáchĐếnGốc()}");
Điều này sẽ xuất ra:
Khoảng cách đến gốc: 5
(Nhớ lại định lý Pythagorean? Nó đang tiện ích ở đây!)
Lớp so với cấu trúc
Bây giờ chúng ta hiểu về cấu trúc, bạn có thể đang tự hỏi: "Khi nào我应该 sử dụng cấu trúc thay vì lớp?" Câu hỏi tuyệt vời! Hãy phân tích nó:
Sử dụng cấu trúc khi:
- Bạn có một lượng dữ liệu nhỏ (thường là dưới 16 byte).
- Dữ liệu là một giá trị logic duy nhất (như một điểm trong không gian 2D).
- Dữ liệu là không thay đổi (không thay đổi sau khi tạo).
- Đối tượng không cần được truyền dưới dạng tham chiếu.
Sử dụng lớp khi:
- Bạn có một lượng dữ liệu lớn.
- Đối tượng cần được kiểm soát về thời gian sống (ví dụ: với một destructor).
- Đối tượng cần kế thừa từ một loại khác.
- Bạn cần các semaphore của loại tham chiếu.
Dưới đây là bảng so sánh nhanh:
Tính năng | Cấu trúc | Lớp |
---|---|---|
Loại | Giá trị | Tham chiếu |
Lưu trữ | Stack | Heap |
Kế thừa | Không thể kế thừa | Có thể kế thừa |
Constructor mặc định | Cung cấp bởi compiler | Không cung cấp bởi compiler |
Có thể trừu tượng | Không | Có thể |
Có thể thực hiện giao diện | Có thể | Có thể |
Có thể có destructor | Không | Có thể |
Kết luận
Và đó là tất cả! Chúng ta đã cùng nhau hành trình qua vùng đất của các cấu trúc C#, từ định nghĩa cơ bản đến so sánh với lớp. Cấu trúc là một công cụ mạnh mẽ trong bộ công cụ C# của bạn, hoàn hảo cho việc đại diện các loại dữ liệu đơn giản một cách hiệu quả.
Nhớ lại, như việc chọn đúng công cụ cho công việc, việc chọn giữa cấu trúc và lớp phụ thuộc vào nhu cầu cụ thể của bạn. Khi bạn tiếp tục hành trình C# của mình, bạn sẽ phát triển trực giác để biết khi nào nên sử dụng từng loại.
Tiếp tục thực hành, tiếp tục lập mã, và quan trọng nhất, hãy vui vẻ! Ai biết được? Lần tới khi bạn đang lên kế hoạch cho chuyến đi bộ đường dài, bạn có thể sẽ tự mình suy nghĩ về balo của bạn dưới dạng các cấu trúc C#. Chúc các bạn lập mã vui vẻ, các nhà phát triển tương lai!
Credits: Image by storyset