2012-02-14 24 views
9

Jakie są zalety używania klasy wartości w C++/CLI.Can klasa wartości zawiera funkcje składowe?Klasa wartości w C++/CLI

+0

Ma wiele wad. Nie powodując, że składnia C++/CLI jest uciążliwa, zbyt wielu programistów niewłaściwie używa kapelusza. Ale jeden bezkonkurencyjny, szybko koduje. Każda przyzwoita książka .NET mówi o nich, koniecznie przeczytaj jedną. –

Odpowiedz

13

a value class to ValueType - oznacza to, że za każdym razem, gdy przypiszesz go do innej zmiennej tego samego typu, cały obiekt zostanie skopiowany do drugiej zmiennej, pozostawiając dwie osobne kopie. Przykładami są podstawowe typy danych liczbowych, takie jak int, bool lub double. ValueTypes są zapieczętowane, co oznacza, że ​​nie można ich uzyskać.

A ref class jest typem odniesienia - jeśli przypisujesz go do innej zmiennej tego samego typu, kopiujesz tylko referencję. Więc dwie zmienne w zasadzie "wskazują" te same dane.

Główną różnicą między value class i ref class jest semantyka kopiowania. Oba mogą zawierać Metody, właściwości pól i tak dalej. Ponadto nie można uzyskać z value class.

Różnica między użyciem słów kluczowych class i struct w tym kontekście jest domyślną widocznością członków. Jest to private dla ref/value class i public dla ref/value struct.

Typowym błędem jest to, że wartość/ref określa miejsce przechowywania (value = stack, ref = heap). Miejsce przechowywania każdego obiektu, niezależnie od tego, czy ValueType lub typ referencyjny, jest szczegółem implementacji, na którym nikt nie powinien opierać się ani na założeniach, i to całkowicie według uznania środowiska wykonawczego, które miejsce przechowywania jest odpowiednie w danym kontekście.

+0

Dlaczego więc tylko klasy ref mogą być dziedziczone, a nie klasy wartości –

+2

To dlatego, że ValueTypes są zapieczętowane, zgodnie ze specyfikacją CLI, "aby uniknąć czynienia z komplikacjami związanymi z cięciem wartości". Zaktualizowałem moją odpowiedź. – Botz3000

+0

dzięki za informację Botz3000 –

Powiązane problemy