Jawaban Svick baik tetapi saya pikir saya akan menambahkan beberapa poin tambahan.
Pertama, paragraf cacat. Jenis pointer tidak mewarisi dari objek. Nilai yang pada waktu kompilasi dikenal sebagai tipe antarmuka atau tipe tipe parameter akan, pada saat runtime, bisa berupa referensi yang tidak valid atau contoh yang bonafide dari sesuatu yang mewarisi dari objek, tetapi selalu membuat saya aneh untuk mengatakan bahwa tipe ini " mewarisi "dari objek; warisan adalah properti yang anggota leluhur adalah anggota keturunan, tetapi Anda biasanya tidak menganggap "ToString" sebagai anggota IEnumerable. Anda menganggapnya sebagai anggota hal yang mengimplementasikan IEnumerable .
Paragraf ini juga cacat karena ini adalah satu-satunya tempat "tipe primitif" muncul dalam spesifikasi, dan muncul tanpa definisi. Karena itu keduanya tidak perlu dan membingungkan dan harus dihilangkan.
Saya ingin paragraf ini diperbaiki untuk sementara waktu. Lain kali aku melihat Mads, aku akan mengingatkannya.
Untuk menjawab pertanyaan spesifik Anda: svick tentu saja benar tetapi akan sangat membantu untuk melihat contoh spesifik. Ketika Anda mengatakan:
struct ColorfulInt
{
int value;
Color color;
...
}
dan Anda membuat, katakanlah, sebuah array:
ColorfulInt[] x = new ColorFulInt[100];
Kemudian penyimpanan untuk 100 int dan 100 Warna masuk dalam array itu sendiri . Jika ColorfulInt bukan kelas maka array akan berisi 100 referensi ke ColorfulInt, yang masing-masing harus dialokasikan secara individual. Secara individual mengalokasikan seratus elemen tersebut jauh lebih efisien baik dalam waktu maupun ruang daripada hanya mengalokasikan hak penyimpanan dalam array itu sendiri.