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
Odpowiedz
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.
Dlaczego więc tylko klasy ref mogą być dziedziczone, a nie klasy wartości –
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
dzięki za informację Botz3000 –
- 1. niewłaściwa klasa wartości: klasa org.apache.hadoop.io.Text nie jest klasą org.apache.hadoop.io.IntWritable
- 2. Dlaczego klasa BuildConfig używa wartości Boolean.parseBoolean() zamiast wartości literalnych?
- 3. Co to jest klasa wartości i jaka jest klasa odniesienia w języku C#?
- 4. Jak dodać więcej wartości do klasy TreeNode w C# klasa
- 5. W takich przypadkach klasa wartości Scala będzie "zapakowana", prawda?
- 6. Klasa ogólna klasa
- 7. Klasa podstawowa vs Klasa użyteczności
- 8. Klasa abstrakcyjna lub pomocnik Klasa
- 9. Klasa wewnętrzna może uzyskiwać dostęp, ale nie aktualizuje wartości - AsyncTask
- 10. ZipPackage Klasa vs Zipfile klasa
- 11. Mockito matchers, klasa wartości scala i wyjątek NullPointerException
- 12. Klasa podobna do enum
- 13. Klasa OracleBulkCopy w Oracle.ManagedDataAccess.dll?
- 14. Warunkowe klasa w HtmlBars
- 15. Wewnętrzna klasa w Javie
- 16. Klasa Vector2D w Androidzie
- 17. statyczna klasa w maszynopisie
- 18. Klasa TextFieldParser
- 19. klasa enum w QVariant w QSettings
- 20. Telefoniczny klasa podstawowa funkcja - klasa dziedziczenie w JavaScript
- 21. Czy w Java jest klasa okręgu, jak klasa Rectangle
- 22. Klasa Singleton kontra klasa z elementem statycznym
- 23. laravel - use Klasa żądania lub klasa wejściowa
- 24. Czy klasa lokalna, klasa wewnętrzna i klasa zagnieżdżona to te same rzeczy w C++?
- 25. klasa hierarchia Scala
- 26. Zarządzana klasa C++ ref.
- 27. Błąd klasa pompowania - NestedScrollView - klasa nie znaleziono
- 28. abstrakcyjna klasa dziedziczy inną klasa abstrakcyjna problem
- 29. Dlaczego decltype (klasa klasa :: :: :: członkiem klasy) ważny
- 30. statyczne członek klasa klasa własnego typu
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ą. –