Почему вы можете создавать примитивные типы данных в C #?

Как получилось, что в C# вы можете создавать примитивные типы данных?

Какое практическое применение имеет эта функциональность?

3
nl ja de
Мне сказали, что вы можете создавать свои собственные типы данных. Они не совпадают с представлением типа данных, создавая объект (например, Integer в Java не полностью совпадает с внутренним типом данных). Это совершенно неправильное понимание?
добавлено автор OmniOwl, источник
Я действительно ненавижу, когда получаю Minus Votes за попытку понять что-то. Это действительно ... не очень конструктивно.
добавлено автор OmniOwl, источник
@MarcGravell Я считаю, что такие типы, как «int», не обрабатываются как объект внутри, а обрабатываются как целое. Представление Integer обычно используется с коллекциями, которые не принимают примитивные типы данных. Почему это было сделано так, я не знаю.
добавлено автор OmniOwl, источник
@MarcGravell Было ощущение, что это будет так, но не было действительно уверенным, поскольку это звучало слишком ... просто, чтобы быть причиной. Спасибо. Я, вероятно, приму свой ответ, когда смогу. Меня действительно раздражает то, что люди так счастливы с Минусом Дающим. Я пытался получить разъяснения.
добавлено автор OmniOwl, источник
Что вы имеете в виду, когда говорите, что можно создавать примитивные типы данных?
добавлено автор Daniel Hilgarth, источник
нет таких вещей, как «примитивные» типы данных .. все они являются объектами.
добавлено автор Aniket Inge, источник
@Aniket struct s не являются объектами (несмотря на наличие object в качестве базового типа и возможность использования в ящике); также существует много типов данных в CLI, которые не управляются; указатели, например.
добавлено автор Marc Gravell, источник
@Vipar, если вы сравниваете с Java, тогда спросите: почему существует int , если Integer ? что добавляет int ? почему требуется int ? Если у вас есть ответ на , который , то в значительной степени это переводит на «почему C# имеет struct s?». Также обратите внимание, что в .NET, int === Int32 : они идентичны (просто псевдонимы для удобства ввода)
добавлено автор Marc Gravell, источник
@ Vipar ах, вы пропустили мою точку. Я говорю следующее: поскольку Integer работает в большем количестве мест, кажется, что int избыточен в Java. На самом деле это не так: если каждый использование number в Java потребовало object , GC сошел с ума.
добавлено автор Marc Gravell, источник
На самом деле, вы не можете создавать новые примитивные типы. В C# имеется определенное количество примитивов. Вы можете создавать экземпляры из них, но это не создает новые типы
добавлено автор Ilya Ivanov, источник

2 ответы

Я предполагаю, что вы имеете в виду struct . Существуют различные виды использования:

  • representing simple data such as a Point or ComplexValue that doesn't warrant the overhead of an object per instance : it is just a (preferably-immutable) set of values that are a composite
  • mapping fields to memory with explicit layout for interop purposes
  • avoiding GC issues for massive datasets

Тем не менее, очень редко объявить struct в C #; т. е. исчезающе редко. Никто не заставляет вас делать это, и если вам не нравятся они: не создавайте.

1
добавлено
@DanielHilgarth Подумайте, что они были реализованы для привлечения разработчиков C, а затем постепенно стали все более устаревшими.
добавлено автор OmniOwl, источник
@MarcGravell Меня это удивляет, так как некоторые из книг, которые я пробовал читать на C#, упоминают структуры для «Те, у кого есть C Background», чтобы быть счастливыми, что они выжили в мире C #.
добавлено автор OmniOwl, источник
+1 для «исчезающе редко [для объявления структуры]». Я в основном никогда их не использую, и иногда задаюсь вопросом, не хватает ли я чего-то о них.
добавлено автор Daniel Hilgarth, источник
@Vipar нет, они были реализованы для решения определенного набора сценариев, которые по-прежнему применяются так же, как и всегда. struct в C# (/ .NET) очень отличается с struct в C. Если что-нибудь, я бы сказал, что struct было выбрано исключительно для того, чтобы запутать разработчиков C, потому что это ведет себя очень по-разному.
добавлено автор Marc Gravell, источник
@Vipar Я делал много работы по обзору книг; многие книги откровенно получают свое описание struct полностью неверно . Похоже, эта книга ничем не отличается. Действительно, в C ++ разница между struct и class только: доступность по умолчанию . Это совсем не так, как разница между struct и class в C #.
добавлено автор Marc Gravell, источник

Нет такой вещи, как «примитивные» типы данных, если вы собираетесь из мира Java. Все эти так называемые примитивные типы данных являются объектами в пространстве имен System (от MSDN).

Тем не менее, вы можете создавать определенные пользователем типы .. и это целая концепция «класса» и «перечислений» и «структур».

См. Здесь, чтобы понять, какие «примитивные» типы данных в C# фактически означают:

примитивные типы данных в C#

0
добавлено
Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot