当我sizeof(int)在C#.NET项目中执行时,返回值为4.我将项目类型设置为x64,那为什么它会说4而不是8?这是因为我正在运行托管代码吗?
我手动将代码从Java转换为C#并与(我称之为)原始类型进行斗争(参见,例如,自动装箱和拆箱在Java和C#中表现不同).从答案我明白double(C#)和Double(C#)是等价的,double(C#)也可以用在容器中,例如作为字典中的键.但是,double(Java)不能在像HashMap这样的容器中使用,因为它是自动装箱Double(Java)的原因.
double(C#)一个原始或对象?double(Java)不同?double除非它被创建,否则不能将(C#)设置为null nullable.
double?(C#)相当于Double(Java)的?它们都被称为物体吗?(在这个讨论中,"第一类对象"一词的用法是否有用?)
所以,实际上有两个问题:
int(Int32)被指定为(显然)32位.怎么样int?(Nullable<int>)?我的直觉告诉我,对于整数,它将是32位,加上布尔值的8位,但实现可能比这更复杂.sizeof(int?); 但是作为int?托管类型,这是不允许的.我知道类型的大小可能与平台有关,而对于包含对其他对象的引用的对象,类似sizeof的操作会产生误导.但是,在给定当前环境的情况下,是否有办法获得托管类型的"基线"大小(即,新实例化实例的大小)?