30/09/2018, 19:17
sự khác nhau của struct và class trong C#
Mình cũng đã đọc nhiều tài liệu phân biệt 2 cái này và biết:
Struct :
- Struct là kiểu dữ liệu tham trị được lưu trong Stack.
- Struct không hỗ trợ kế thừa
- Không thể khai báo hàm khởi tạo(không đối số)
- …
Classs : - Class là kiểu dữ liệu tham chiếu được lưu trong heap.
- class có hỗ trợ kế thừa.
- …
Mình vẫn chưa hiểu cái : class là kiểu dữ liệu reference type còn struture là value type
Ai có thể cho mình ví dụ cụ thể (1 đoạn code C# viết về struct sinhvien hoặc class sinhvien chẳng hạn) để chỉ ra sự khác nhau 2 cái này không? Mình là dân C,JAVA mới nhập cư sang C#
Mong mọi người chỉ giáo
Bài liên quan
Trong C#, những cái gì là reference type thì variable đều trỏ lên heap.
Còn value type thì variable thường nằm trên stack.
Khi bạn sử dụng value type làm tham số cho hàm, khi hàm đó chạy là cả 1 cục dữ liệu value type sẽ được bỏ vào hàm.
Còn nếu là reference type làm tham số thì chỉ có cái reference (có thể coi là 1 dạng pointer cao cấp) được bỏ vào hàm thôi, rồi từ reference đó truy cập đến dữ liệu thật.
Theo mình biết thì thường khi gọi hàm, các tham số sẽ được push vào stack, dùng kiểu reference thì tiết kiệm được stack, nhưng tốc độ chạy thì chưa chắc vì làm thế này là dùng heap vốn không nhanh hơn stack, thường thì những dữ liệu loại nhỏ mà được sử dụng liên tục thì có thể dùng stack, quy tắc của Microsoft để lựa chọn class và struct.
À mà bởi vì reference type nó kiểu như con trỏ, nên có thể gán null, value type không như vậy được.
Có 1 ví dụ khá hay trên này nói về việc gán dữ liệu giữa 2 loại: gán biến class thì nó gán reference, gán biến struct thì nó gán cả khối dữ liệu (ngoại trừ trường hợp bạn đi overload operator nhé).
Cảm ơn bạn mình đã hiểu rồi
FunFact:
Tất cả Reference type đều được lưu trên heap, hầu hết Value type được lưu trên stack
Ủa thế có Value type nào lưu trên heap vậy
value type nằm trong class chứ gì nữa