Что такое int
в С#? Это ключевое слово или класс, производный от system.ValueTypes? Если это ключевое слово, то как компилируются следующие строки
int i = new int(); // If int is not a class then how does it have a default constructor
Console.WriteLine(i.ToString()); // If int is not a class then how does it have member functions
Если int
— это класс, то почему нет необходимости всегда инициализировать его с помощью new
? Как компилируется следующая строка?
int i = 8;
int
этоSystem.Int32
, который является типомstruct
. (Чтобы упростить жизнь, компилятор знает о различных литеральных конструкциях, таких как целые числа, значения с плавающей запятой и строки. Однако это фиксированный набор. Например, для GUID нет литерала, поэтому требуетсяnew Guid(string)
.) - person   schedule 21.07.2012int i = 8
компилируется по той же причине, что иstring foo = "bar"
.8
— это литерал типаint
, точно так же, как"bar"
— это литерал типаstring
. - person cdhowie   schedule 21.07.2012System.Int32
, то как он наследуется от классаSystem.Object
?? - person user1232138   schedule 21.07.2012struct
является подтипомValueType
, аValueType
является подтипомobject
. В отличие отclass
другие подтипы не могут быть указаны с помощьюstruct
(хотя интерфейсы могут быть указаны). Вот как определяется дерево типов в C#/CLR. См. stackoverflow.com /questions/11461789/ Конечно, это еще не все.object x = 1
блокирует (ключевое слово) значениеint
, например. - person   schedule 21.07.2012int
наследуется отSystem.Object
.. - person user1232138   schedule 21.07.2012struct -> (abstract class) System.ValueType -> (class) System.Object
, которое нельзя изменить, так же как нельзя сделать класс не в конечном счете производным отobject
. Каждое значениеstruct
являетсяValueType
. КаждыйValueType
являетсяobject
. Таким образом, каждое значениеstruct
являетсяobject
. - person   schedule 21.07.2012ValueType
, абстрактный класс, является подтипомobject
.) - person   schedule 21.07.2012