- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
System.ValueType 是 class ,
然而所有值类型都是结构。
如果我像这样创建一个 ValueType 的实例:
System.ValueType foo = 5;
...是保存在堆上还是栈上?
最佳答案
System.ValueType
不是值类型。值类型是继承自ValueType
的东西,但不是ValueType
本身。所以:
System.ValueType foo = 5;
此处,5
被加载到堆栈中。然后将其装箱(使用 int
类型的盒子)到堆上。然后将对象引用分配给引用 foo
。我们可以通过查看 IL 来了解这一点:
ldc.i4.5 // push int32 value 5 onto the stack
box int32 // box the value at the top of the stack, type int32
stloc.0 // assign to "foo"
不过,一般来说:结构可以在堆上或在堆栈上,这取决于上下文。坦率地说,哪个并不重要——因为两者都是实现细节。重要的是行为……而且(至少在未装箱的形式下),关于结构的关键点是它们的赋值复制语义。
关于c# - System.ValueType 的一个实例在堆上还是在栈上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12508612/
比方说,我在 c# 中有以下代码 int x = 0; x.ToString(); 这是否在内部对 x 进行装箱?有没有办法从 visual studio 中看到这种情况? 最佳答案 在此特定情况下,
C# 不允许结构派生自类,但所有 ValueType 都派生自 Object。这个区别在哪里? CLR 如何处理这个问题? 最佳答案 C# doesn't allow structs to deriv
我正在尝试向泛型方法添加约束,以便它检查 ValueTypes、Strings 或 Nullable 值类型。 问题在于: 值类型是 struts 字符串是不可变的引用类型 可为空的是值类型,但不会在
我正在做一项不允许使用任何 STL 容器的家庭作业。我对 LinkedList 的实现是用指针链接在一起的节点集合。我有另一个名为 ContinuousList 的类,它有一个数据成员 LinkedL
引自MSDN Link for ValueType Class In cases where it is necessary for a value type to behave like an ob
以下打印等于: struct A { int x; public A(int _x) { x = _x; } public int Y { get
我构建了一个框架,该框架允许根据哪个列是主排序列对表中的报告数据进行级联排序。它在大多数情况下都有效,但在一个特定但重要的情况下除外:当字段的属性是值类型时。我收到以下错误消息: System.Arg
我有一个方法,它返回给定的类型: T foo(Class valueType) {...}; String s = foo(Java.lang.String.class); 我正在尝试发送泛型类型作为
是否可以在不编写特定于类型的克隆代码的情况下克隆一个已知为盒装 ValueType 的对象? 一些引用代码 List values = new List {3, DateTime.Now, 23.4M
几天前我需要切换一个bool,结果我这样做了: IsVisible = !IsVisible; 我发现这是归档该功能的最简单方法。但在像上面的例子那样做之前,我尝试了一些不同的方法。 主要是关于使用扩
我的理解是 .Net 中的每个新线程分配 1MB of stack space .我的进一步理解是值类型存储在堆栈而不是堆中...... 所以我的问题是这样的;这种行为是否意味着任何 ValueTyp
如果您查看 .NET Nullable 的文档,您会看到: struct Nullable 请注意,它是一个结构,而不是一个类。 好像是struct Nullable 不是 ValueType,
执行这段代码后我感到很困惑,其中字符串的行为似乎就像它们是值类型一样。我想知道赋值运算符是否正在对字符串的相等运算符等值进行操作。 这是我用来测试这种行为的一段代码。 using System; na
问题应该是不言自明的。我有一个 datagridview,其中有一列,其单元格在用户输入时应仅接受正整数。 那么我怎样才能设置这样的东西: dgv.Columns[i].Val
我在许多文章中读到所有值都是从System.ValueType派生的类型。但经过一番调查后,我发现所有值类型要么是 struct 要么是 enum。 众所周知,struct 不支持继承。那么值类型是如
如果我将一个简单的值类型(例如 int)分配给 ValueType 类型的属性,那么该值是否被装箱? 例如,如果我这样做: int i = 4; ValueType test = i; 值会被装箱吗?
System.ValueType 是 class , 然而所有值类型都是结构。 如果我像这样创建一个 ValueType 的实例: System.ValueType foo = 5; ...是保存在堆
考虑这个类: public class Foo { public Int32 MyField; } 我猜“MyField”成员不在线程堆栈上,因为它可以被多个线程访问,它肯定在托管堆中,但这是
结构体只是一个继承自 System.ValueType 的类,对吗? 关键字“struct”是否只是编写一个类的语法糖:名称后有 System.ValueType? 如果它只是一个类,那么不是所有的类
当我尝试定义一个继承自 System.ValueType 或 System.Enum 类的类时,出现错误: Cannot derive from special class System.ValueT
我是一名优秀的程序员,十分优秀!