Odpowiedź Svicka jest dobra, ale pomyślałem, że dodam kilka dodatkowych punktów.
Po pierwsze, akapit jest wadliwy. Typy wskaźników nie dziedziczą po obiekcie. Wartości, które są w czasie kompilacji znane jako typy interfejsów lub typy parametrów typów, w czasie wykonywania będą albo niepoprawnymi referencjami, albo autentycznymi instancjami czegoś, co dziedziczy po obiekcie, ale zawsze dziwnie było mi powiedzieć, że te typy „ odziedziczyć "po obiekcie; Dziedziczenie jest właściwością, że członkowie przodka są członkami potomka, ale zwykle nie myślisz o „ToString” jako o członku IEnumerable. Myślicie o tym jako o członku implementującym IEnumerable .
Akapit jest również wadliwy, ponieważ jest to jedyne miejsce, w którym „typ pierwotny” pojawia się w specyfikacji i pojawia się bez definicji. Jest to zatem niepotrzebne i mylące i powinno zostać usunięte.
Chciałem, aby ten akapit został przez jakiś czas naprawiony. Następnym razem, gdy zobaczę Madsa, przypomnę mu.
Aby odpowiedzieć na konkretne pytanie: svick jest oczywiście poprawny, ale warto zobaczyć konkretny przykład. Kiedy powiesz:
struct ColorfulInt
{
int value;
Color color;
...
}
i tworzysz, powiedzmy, tablicę:
ColorfulInt[] x = new ColorFulInt[100];
Następnie pamięć dla tych 100 liczb wewnętrznych i 100 kolorów przechodzi do samej tablicy . Gdyby zamiast tego ColorfulInt była tablica, tablica zawierałaby 100 odwołań do ColorfulInt, z których każde musiałoby być przydzielone indywidualnie. Indywidualne przydzielanie tych stu elementów jest znacznie mniej wydajne zarówno pod względem czasu, jak i przestrzeni niż zwykłe przydzielanie pamięci bezpośrednio w samej tablicy.