相关疑难解决方法(0)

ValueTypes如何从Object(ReferenceType)派生而仍然是ValueTypes?

C#不允许从类派生结构,但所有ValueType都派生自Object.这种区别在哪里?

CLR如何处理这个问题?

.net c# clr value-type reference-type

78
推荐指数
5
解决办法
1万
查看次数

装箱/拆箱和铸造有什么区别?

装箱/拆箱和铸造有什么区别?

通常,这些术语似乎可以互换使用.

.net boxing unboxing casting

67
推荐指数
4
解决办法
4万
查看次数

System.Int32包含...另一个System.Int32

我用反射检查内容,System.Int32发现它包含另一个System.Int32.

System.Int32 m_value;
Run Code Online (Sandbox Code Playgroud)

我不明白这是怎么回事.

int实际上是你所拥有的"后退整数":如果你int打算并使用反射来改变其m_value字段的值,你可以有效地改变整数的值:

object testInt = 4;
Console.WriteLine(testInt); // yields 4

typeof(System.Int32)
    .GetField("m_value", BindingFlags.NonPublic | BindingFlags.Instance)
    .SetValue(testInt, 5);
Console.WriteLine(testInt); // yields 5
Run Code Online (Sandbox Code Playgroud)

这个奇点背后必须有一个理性的解释.值类型如何包含自身?CLR用它来制作它有什么神奇之处?

clr primitive-types

14
推荐指数
1
解决办法
518
查看次数

.NET幕后:'对象'存储什么?

一个天真的类型系统会将对象存储为指向其类型的指针(其中包含许多有用的信息,如vtable,对象大小等),后跟其数据.如果.Net具有这样的类型系统,则object在32位系统上占用4个字节,在64位上占用8个字节.

我们可以看到它没有.对象开销是两个指针大小,另外,还有一个指针大小的"最小"大小.

那么object在幕后实际存储的内容是什么?

.net clr

8
推荐指数
2
解决办法
656
查看次数