我在这里遇到了编程术语,这让我感到困惑,我无法收集我对如何从Common Type System页面实际正确地表达(写)这些MSDN理论句子的想法。
有人会帮我这个,我想明白这一点! 如果有人会如此友好地写一些代码并对此问题发表评论, 它会很棒,值得你称赞!
//这是文本(取自“结构”段落): https://msdn.microsoft.com/en-us/library/zcx1eb1e(v=vs.110).aspx#
“对于每种值类型,公共语言运行库提供相应的盒装类型,这是一个与值类型具有相同状态和行为的类。 将值类型的实例传递给接受System.Object类型的参数的方法时,将其装箱。 当控件从接受值类型作为by-reference参数的方法调用返回时,它被取消装箱(即,从类的实例转换回值类型的实例)。 有些语言要求在需要盒装类型时使用特殊语法;其他人在需要时自动使用盒装类型。 定义值类型时,您要定义盒装类型和未装箱类型。“
提前谢谢你,最好的问候!
答案 0 :(得分:0)
object
和值类型的存储方式不同。 object
是指向堆中内存的指针,其中包含该对象的二进制表示形式。堆栈是分配用于存储指针和值类型的内存。因此,函数没有指向integer
或bool
的指针。它传递了实际值的副本。
但是如果你有这样的方法:
string GetString(object o)
{
return o.ToString();
}
该方法需要一个对象,即指向内存中某个位置的指针,即使您向其传递值类型也是如此。因此,为了做到这一点,框架必须创建一个存储在包含int
的堆上的对象,以便它可以将该值的引用(指针)传递给该函数。那个拳击。
拳击是隐含的。您无需调用某些转换功能即可将int
转换为object
。
当您获取该对象并将其强制转换为值类型时,会发生取消装箱。例如,
object x = 5; //Boxes the value to create an object with a pointer
var y = (int)x; //Unboxes the value, creating an int on the stack.
当您取消装箱存储在堆中并由x
引用的对象时,将检查其值并检索其值。拆箱是明确的。当您将任何内容从object
转换为值类型时,您必须指定要将其转换为的类型。
答案 1 :(得分:0)