Некоторые люди здесь имеют странное представление о том, что такое «объект» в объектно-ориентированном программировании. Для того, чтобы что-то было объектом, оно не должно быть ссылочным типом или, в более общем смысле, следовать любой формальной реализации.
Все это означает, что вы можете действовать как первоклассный гражданин в объектно-ориентированном мире. Поскольку вы можете делать это со значениями в C # (благодаря автоматической блокировке), все действительно является объектом. В некоторой степени это верно даже для функций (но, возможно, не для классов).
Является ли это актуальным на практике, это другой вопрос, но это общая проблема с ООП, которую я замечаю еще раз. Никто не имеет четкого представления об определении ООП (да, большинство людей согласны с тем, что оно как-то связано с полиморфизмом, наследованием и инкапсуляцией, некоторые добавляют «абстракцию» для хорошей меры).
С точки зрения использования каждое значение в C # обрабатывается как объект. Тем не менее, мне нравится принятый в настоящее время ответ. Он предлагает оба технически важных аспекта.
Обратите внимание, что в других контекстах, например, В C ++ подчеркиваются другие аспекты, поскольку C ++ не обязательно является объектно-ориентированным и, более того, гораздо больше внимания уделяется аспектам низкого уровня. Поэтому различие между объектами, POD и встроенными примитивами иногда имеет смысл (а иногда и нет).