.NET中的值类型实际上是如何工作的?我无法理解.NET中的值类型表示。每个值类型都派生自System.ValueType类,这是否意味着值类型是一个类?例如,如果我写:intx=5;这意味着我创建了一个System.Int32类的实例'将它写入变量x??System.ValueType类实际上只是一个“元”类,内部处理方式与普通类不同。结构和原始类型隐式继承System.ValueType,但该类型在运行时实际上并不存在,它只是一种方式,程序集标记类应被视为具有按值传递语义的值类型结构。与其他答案相反,值类型并不总是分配在堆栈上。当它们是类中的字段时,在实例化该对象时,它们就像其他类数据一样位于堆上。当在迭代器或闭包中使用时,局部变量也可以提升为隐式类。请参阅EricLippert的文章。简而言之,值类型是按值复制的。值类型就像引用类型,值类型的实例是对象。5是一个对象,是System.Int32(简称int)的一个实例。现在,有很多话要说。说真的,网络上有数百页关于这个主题的内容,其中大部分都以惊人的速度烧毁了我的大脑。我真正记得的是int和Int32是同一件事,它们都像一个结构,而不是一个类。“int”是Int32的缩写。(如果将鼠标悬停在int上,工具提示将显示“structSystem.Int32”。这意味着:publicclassBoxedInt{publicintx;公共BoxedInt(inti){x=i;}}publicTest(){BoxedIntbi=newBoxedInt(10);盒装(双);Console.WriteLine(bi.x);//返回11,就像任何引用类型一样。int六=10;有价值的(vi);控制台.WriteLine(vi);//返回10,因为它就像一个结构体。(它是)}publicvoidBoxed(BoxedInti){i.x++;}publicvoidValued(inti){i++;}值类型不是类。这些是具有内置类型的语言,由.NETCTS(通用类型系统)处理。CTS是CLR中的一个组件,负责处理bool、int、double、float等值类型。当你创建一个值类型的对象时,它是在栈上创建的。当你将它传递给函数或从函数返回时,然后在ram中为它创建一个新对象。但是在引用类型的情况下,只会传递对象的引用,不会在内存中创建新对象。有一些用户定义的值类型不在语言规范中,由用户定义。此类值类型继承自System.ValueType。这种值类型的一个例子是复数。我们可以使用System.ValueType创建我们自己的多个用户定义类型。C#学习教程就是这些:.NET中的值类型实际上是如何工作的?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
