Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

So sánh Class và Struct trong C#

Trong C#, struct là value type, class là reference type. Cả hai đều gom nhóm dữ liệu và hành vi nhưng có khác biệt quan trọng.

Bảng so sánh chi tiết:

Đặc điểmClassStruct
KiểuReference type (heap)Value type (stack/inline)
Kế thừaHỗ trợ đơn kế thừa, implement interfaceKhông kế thừa class/struct khác, chỉ implement interface
Base classCó thể làm base classKhông thể làm base class
ConstructorCó default constructor, custom constructorKhông cho phép parameterless constructor (trước C# 10), có constructor có tham số
DestructorCó (~ClassName)Không có destructor/finalizer
InstantiationCần new (thường)Có thể không dùng new (giá trị mặc định)
NullCó thể nullKhông null (trừ Nullable<T> / T?)
AssignmentCopy tham chiếuCopy giá trị (deep copy fields)
Passing methodTruyền tham chiếuTruyền giá trị (copy)
InterfaceImplement interfaceImplement interface
EventCó eventCó event
sizeofKhông dùng được (unsafe mới được)Dùng được trong unsafe context

Khi nào dùng Struct?

  • Kiểu dữ liệu nhỏ, đơn giản (Point, Rectangle, Color, DateTime...).
  • Cần hiệu năng cao, tránh GC pressure (allocation trên stack).
  • Bất biến (immutable) - struct nên thiết kế immutable.
  • Số lượng instance lớn (array của struct liền móc bộ nhớ).

Khi nào dùng Class?

  • Đối tượng phức tạp, có identity, lifecycle quản lý.
  • Cần kế thừa, polymorphism.
  • Reference semantics (chia sẻ state).
  • Cần nullability.