C #: это обнуляемые типы (int?) Объектов? - PullRequest
1 голос
/ 05 декабря 2009

Я понимаю из этого поста , что типы значений в C # не являются объектами. То есть они не наследуются от System.Object.

Предполагая, что моя логика соответствует этой точке, допускаются ли типы NULL, например int ?, объекты. Они наследуют от объекта?

Если да, то подчиняются ли они тем же правилам и ограничениям, что и другие объекты, или существуют специальные правила, регулирующие их поведение?

Так же, как ссылка, этот вопрос возникает из вопроса о работе оператора нулевого слияния.

Ответы [ 3 ]

11 голосов
/ 05 декабря 2009

Неправильно - типы значений являются объектами, но они не ведут себя так же, как ссылочные типы - они передаются по значению, а не по ссылке. Таким образом, Nullable<T> (что и есть T?) является структурой и поэтому наследуется от System.ValueType и System.Object. В компиляторе C # есть Magic, который заставляет обнуляемые типы вести себя так же, как ссылочные типы в отношении null и ??, но они всегда имеют семантику копирования по значению.

1 голос
/ 05 декабря 2009

Вы спрашиваете о "наследовании от System.Object" или "ссылочных типах"?

Типы значений наследуются от System.Object, но они не являются ссылочными типами.

Обнуляемые типы также являются типами значений, поэтому они также не являются ссылочными типами, но они наследуются от System.Object.

Обратите внимание, что существует разница в том, что вы, как программист, можете заявить, и в том, что предоставляет система.

Типы значений do наследуются от System.Object, но вы не можете самостоятельно объявлять типы значений для наследования от чего-либо.

Типы значений происходят от System.ValueType, который, в свою очередь, происходит от System.Object.

Технически, все типы значений происходят от System.Object.

0 голосов
/ 05 декабря 2009

Все является объектом, типы значений - это просто структуры, а не классы.

...