0

我在这里停留在编程术语中,这让我感到困惑,我无法从 Common Type System 页面收集关于如何实际和正确表达(编写)这几个 MSDN 理论句子的想法。

有人能帮我解决这个问题吗,我想了解这一点!如果有人这么好心地写一些代码并评论这个问题,那将是令人敬畏和值得称赞的!

//这是正文(取自“结构”段落): https ://msdn.microsoft.com/en-us/library/zcx1eb1e(v=vs.110).aspx#

“对于每一种值类型,公共语言运行时都提供一个对应的装箱类型,它是一个与值类型具有相同状态和行为的类。值类型的实例在传递给接受System.Object 类型的参数。当控制从接受值类型作为按引用参数的方法调用返回时,它被取消装箱(即从类的实例转换回值类型的实例)。一些语言要求您在需要装箱类型时使用特殊语法;其他语言在需要时自动使用装箱类型。当您定义值类型时,您同时定义了装箱类型和未装箱类型。

提前谢谢你,最好的问候!

4

2 回答 2

0

.NET 与语言无关,它允许程序员用不同的语言编写代码(可以编译为 IL),并且该代码可以与用不同语言编写的其他代码交互。

此功能由 CTS(通用类型系统)提供,该标准指定如何在内存中表示类型定义以及如何在CLR(通用语言运行时)中声明、使用和管理类型。

例子

C# 有一个int数据类型,而 VB.NET 有一个Integer数据类型。编译后, int 和 Integer的两个实例都将使用CTS 中的相同结构 Int32。

在此处输入图像描述

于 2020-03-02T17:15:57.893 回答
0

Anobject和值类型的存储方式不同。Anobject是指向堆中内存的指针,其中包含该对象的二进制表示。堆栈是分配用于存储指针和值类型的内存。所以函数没有指向integeror的指针bool。它传递了实际值的副本。

但是如果你有这样的方法:

string GetString(object o)
{
    return o.ToString();
}

该方法需要一个对象,一个指向内存中某个位置的指针,即使您将值类型传递给它。因此,为了做到这一点,框架必须创建一个存储在包含该对象的堆上的对象,int以便它可以将该值的引用(指针)传递给函数。那是拳击。

拳击是隐含的。您不必调用一些转换函数来将 an 转换intobject.

当您获取该对象并将其转换为值类型时,就会发生拆箱。例如,

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为值类型时,您必须指定要将其转换为的类型。

于 2016-05-05T01:29:30.540 回答