Можно предположить, что все переменные C #, инициализированные новым, являются ссылками? - PullRequest
2 голосов
/ 14 мая 2009

Я узнаю о C # refs прямо сейчас.

Можно ли предположить, что все переменные, которые назначены с новым, являются ссылками, а не значениями?

Пример:

SomeType variable = new SomeType()

Ответы [ 6 ]

4 голосов
/ 14 мая 2009
нет

Нет

  • Экземпляры классов являются ссылками, но экземпляры структур являются значениями.
  • Классы и структуры могут быть построены с использованием новых

Например, System.Drawing.Point - это struct, а не class:

Point point = new Point(1, 1); //point is a value, not a reference
3 голосов
/ 14 мая 2009

C # имеет два типа объектов - ссылочные типы (определенные с ключевым словом класса) и типы значений (определенные с ключевым словом struct).

  • RT создаются в управляемой куче. Когда вы выполняете new () в RT, вы возвращаете ссылку на объект в куче. Две переменные RT могут указывать на один и тот же объект.
  • VT создаются в стеке (если они не являются полями в ссылочном типе). Когда вы выполняете new () на VT, вы получаете переменную, которая указывает на начало объекта в стеке. Две переменные типа значения не могут указывать на один и тот же объект - они всегда два разных объекта в стеке. Однако это деталь реализации, которую важно помнить, что VT имеют семантику типа значения.

Подберите хорошую книгу по C # для более подробной информации. Это важная концепция.

1 голос
/ 14 мая 2009

Нет. В C # структуры также создаются с использованием new (), но обрабатываются как значения.

1 голос
/ 14 мая 2009

Нет, типы значений не являются ссылками.

Но с любым другим не типом типа и параметром ref / out они являются ссылками.

0 голосов
/ 14 мая 2009

Не обязательно. Когда вы узнаете больше о C #, вы обнаружите, что у вас есть классы, которые являются ссылочными типами, и структуры, которые являются типами значений. Оба они создаются с использованием ключевого слова «new», но экземпляры структур не являются ссылками.

0 голосов
/ 14 мая 2009

Похоже, вы путаете ссылки с объектами. Если это так, то типы yes, созданные с помощью нового ключевого слова, являются объектами. За исключением структур, которые рассматриваются как значения.

...