Является ли .NET Object Creation "ex nihilo"?

Я читал о prototype-based языках, и это сомнение приходит мне в голову:

Является ли .NET Object Creation ex nihilo ( "из ничего" ) и поэтому позволяет создавать новые объекты с нуля? Или вместо этого создается .NET-объект, основанный на клонировании существующего объекта (т.е. Object) в качестве прототипа клонирования для создания новых объектов?

Ответ 1

Самые основные объекты в .Net не имеют пользовательских данных, а только некоторые сведения о внутренней платформе о их типе и местоположении в памяти их фактических данных. С точки зрения пользователя (разработчика) они "просто существуют", и они отличаются только своей "личностью". Их класс не может быть расширен каким-либо образом. Я ничего не вижу в клонировании.

Более сложные объекты производятся от чего-то и, в конечном счете, производятся от базового объекта. В .Net нет копировальной конструкции и глубокой копирующей семантики, поэтому на уровне неосновных объектов до сих пор нет смысла клонировать что-либо.

На уровне метаданных каждый объект несет информацию о том, к какому классу (классам) он принадлежит. Метаинформация является общей, и все объекты того же класса просто указывают на общую метаинформацию. Все еще нет смысла клонировать что-либо.

Таким образом, я был бы очень удивлен, если бы создание объекта было сделано с использованием прототипа-клонирования. Я не знаю с абсолютной уверенностью, но я уверен, что это не так. Я почти уверен, что создание объекта - это просто выделение небольшого блока памяти и, возможно, установка нескольких указателей внутри его заголовка.

Это, безусловно, проверяется, если кто-то * ngen * s некоторый код и разбирает его, чтобы увидеть, как работает оператор new():)

Ответ 2

С# не основан на прототипе. Вам не нужен экземпляр существующего объекта для создания нового, и вы не можете "расширять" объект, такой как javascript.

Итак, в принципе, все объекты создаются ex nihilo.