Câu trả lời của Svick là tốt nhưng tôi nghĩ tôi sẽ thêm một vài điểm.
Trước hết, đoạn văn là thiếu sót. Các loại con trỏ không kế thừa từ đối tượng. Các giá trị tại thời điểm biên dịch được biết là các loại giao diện hoặc các loại tham số loại, trong thời gian chạy, sẽ là các tham chiếu không hợp lệ hoặc các trường hợp thực sự của một cái gì đó thừa hưởng từ đối tượng, nhưng nó luôn cấu trúc tôi là kỳ quặc để nói rằng các loại này " kế thừa "từ đối tượng; thừa kế là tài sản mà các thành viên của tổ tiên là thành viên của hậu duệ, nhưng bạn thường không nghĩ "ToString" là một thành viên của IEnumerable. Bạn nghĩ về nó như là một thành viên của điều thực hiện IEnumerable .
Đoạn văn cũng rất thiếu sót vì đây là nơi duy nhất "kiểu nguyên thủy" xuất hiện trong thông số kỹ thuật và nó xuất hiện mà không có định nghĩa. Do đó, nó là không cần thiết và khó hiểu và nên được loại bỏ.
Tôi đã muốn đoạn này được sửa trong một thời gian. Lần sau tôi thấy Mads tôi sẽ nhắc anh ấy.
Để giải quyết câu hỏi cụ thể của bạn: tất nhiên là đúng, nhưng thật hữu ích khi xem một ví dụ cụ thể. Khi bạn nói:
struct ColorfulInt
{
int value;
Color color;
...
}
và bạn tạo một mảng:
ColorfulInt[] x = new ColorFulInt[100];
Sau đó, bộ lưu trữ cho 100 ints và 100 Colors sẽ nằm trong mảng đó . Nếu ColourInt thay vào đó là một lớp thì mảng sẽ chứa 100 tham chiếu đến ColourInt, mỗi tham số sẽ phải được phân bổ riêng lẻ. Việc phân bổ riêng lẻ hàng trăm phần tử đó sẽ kém hiệu quả hơn cả về thời gian và không gian so với việc phân bổ lưu trữ ngay trong chính mảng.