Nếu một thực thể sẽ không thay đổi, câu hỏi về việc nên sử dụng một cấu trúc hay một lớp nói chung sẽ là một trong những hiệu suất hơn là ngữ nghĩa. Trên hệ thống 32/64 bit, các tham chiếu lớp yêu cầu 4/8 byte để lưu trữ, bất kể lượng thông tin trong lớp; sao chép một tham chiếu lớp sẽ yêu cầu sao chép 4/8 byte. Mặt khác, mỗi khác biệtthể hiện của lớp sẽ có 8/16 byte chi phí ngoài thông tin chứa và chi phí bộ nhớ của các tham chiếu đến nó. Giả sử một người muốn một mảng gồm 500 thực thể, mỗi thực thể chứa bốn số nguyên 32 bit. Nếu thực thể là một kiểu cấu trúc, mảng sẽ yêu cầu 8.000 byte bất kể tất cả 500 thực thể đều giống hệt nhau, tất cả đều khác nhau hoặc ở đâu đó giữa. Nếu thực thể là một loại lớp, mảng 500 tham chiếu sẽ mất 4.000 byte. Nếu các tham chiếu đó đều trỏ đến các đối tượng khác nhau, thì các đối tượng sẽ yêu cầu thêm 24 byte mỗi đối tượng (12.000 byte cho tất cả 500), tổng cộng 16.000 byte - gấp đôi chi phí lưu trữ của loại cấu trúc. Mặt khác, trong mã đã tạo một thể hiện đối tượng và sau đó sao chép một tham chiếu đến tất cả 500 vị trí mảng, tổng chi phí sẽ là 24 byte cho thể hiện đó và 4, 000 cho mảng - tổng cộng 4.024 byte. Một khoản tiết kiệm lớn. Rất ít tình huống sẽ diễn ra tốt như tình huống cuối cùng, nhưng trong một số trường hợp, có thể sao chép một số tham chiếu đến đủ các vị trí mảng để làm cho việc chia sẻ đó trở nên đáng giá.
Nếu thực thể được coi là có thể thay đổi, câu hỏi về việc sử dụng một lớp hoặc cấu trúc là một cách dễ dàng hơn. Giả sử "Điều" là một cấu trúc hoặc lớp có trường số nguyên gọi là x và người ta thực hiện mã sau:
Điều t1, t2;
...
t2 = t1;
t2.x = 5;
Có ai muốn câu lệnh sau ảnh hưởng đến t1.x không?
Nếu Thing là một loại lớp, t1 và t2 sẽ tương đương, có nghĩa là t1.x và t2.x cũng sẽ tương đương. Do đó, câu lệnh thứ hai sẽ ảnh hưởng đến t1.x. Nếu Thing là một loại cấu trúc, t1 và t2 sẽ là các trường hợp khác nhau, có nghĩa là t1.x và t2.x sẽ đề cập đến các số nguyên khác nhau. Do đó, câu lệnh thứ hai sẽ không ảnh hưởng đến t1.x.
Các cấu trúc có thể thay đổi và các lớp có thể thay đổi có các hành vi khác nhau về cơ bản, mặc dù .net có một số điểm kỳ quặc trong việc xử lý các đột biến cấu trúc. Nếu ai đó muốn hành vi loại giá trị (có nghĩa là "t2 = t1" sẽ sao chép dữ liệu từ t1 sang t2 trong khi để t1 và t2 làm các trường hợp riêng biệt) và nếu một người có thể sống với các quirks trong cách xử lý các loại giá trị của .net, hãy sử dụng một cấu trúc. Nếu ai đó muốn ngữ nghĩa loại giá trị nhưng các quirks của .net sẽ dẫn đến ngữ nghĩa loại giá trị bị hỏng trong ứng dụng của một người, hãy sử dụng một lớp và lẩm bẩm.