什么是定义value class
和reference class
在C#中?
这是如何从一个不同的value type
和reference type
?
因为我读这在MCTS自控进度培训工具包(考试70-536)我问这个问题。 第1章,第1课,复习课4:
你需要创建一个只包含值类型的简单类或结构。 因此,它为高效的方式运行,必须创建类或结构。 你必须能够通过类或结构程序,而不用担心该程序将修改它。 你应该创建下列哪一项?
引用类
B参考结构
C值类
d值结构
正确答案:d
一个不正确:您可以创建一个引用类; 然而,传递到过程时,它可以修改。
乙不正确:您不能创建一个参考结构。
Ç不正确:您可以创建一个值类; 但是,结构往往是更有效的。
d正确:值结构通常是最有效的。
值类型是按值传递,而引用类型是通过引用传递。
编辑:值/参考类
有没有一个“值类”或C#“引用类”的概念,所以要求它的定义是没有实际意义。
见概述关于这个问题,但认真遵循MSND链接和阅读完整的通用类型系统的它的篇章。 (您也可以要求在评论第一,问题)
你可能会想C ++ / CLI它不同于C#,允许用户声明一个“值类”或的“引用类”。 在C#中,声明任何类将隐含地引用类 - 仅内置类型,结构和枚举有值语义。 要了解在C ++ / CLI值类,请看这里: http://www.ddj.com/cpp/184401955
相比于REF类值类功能太少,而且是“普通的旧数据”非常有用; 也就是说,它没有身份数据。 既然你当你将一个复制到另一个数据时,系统将为您提供一个默认值(和强制性)拷贝构造函数简单的拷贝到其他对象的数据。
要值类转换为引用类(从而把它的垃圾收集堆),你可以在“盒子”它。
要决定你在写一个类是否是一个或另一个,问自己是否有一个身份。 这通常意味着它有一些状态,或有一个标识符或名称,或者其自己的上下文的概念(例如,节点指向邻近节点)。
如果不是这样,它可能是一个值类。
在C#中,但是,值类被声明为“结构”。
值类型存储,而引用类型的引用存储到数据的实际数据。 引用类型在堆上动态存储而值类型存储在堆栈中。
值类型: http://msdn.microsoft.com/en-us/library/s1ax56ch.aspx引用类型: http://msdn.microsoft.com/en-us/library/490f96s2.aspx
当您参考值类型(即,通过使用它的名字),你所谈论的,其中数据是在内存中的位置。 这样,由于没有办法的存储位置说值类型不能为null“我不代表任何东西。” 默认情况下,按值传递值类型(也就是你在传递给方法的对象不作为方法的执行而发生变化)。
当您使用引用类型的对象,你实际上是使用一种变相的指针。 这个名字指的是一个内存位置,那里的对象实际上住,然后在内存中引用的地方。 因此,你可以指定空引用类型,因为他们有一个跟你说“我指向行不通的。” 引用类型也允许对象被改变的执行方法的结果,所以你可以通过它变成一个方法调用改变myReferenceObject的属性。
引用类型被传递到由参考和值类型的方法由值; 在后一种情况下的接收方法的变量的副本,并在前者它接收到的原始数据的参考。 如果你改变你的副本,原来并没有改变。 如果你改变了原来的数据,你必须参考,数据更改到处数据的引用被改变。 如果类似的程序到C#程序中下创建的,通常引用类型将会像使用指针和值类型将在堆栈上正常数据的数据。
数字类型,字符,日期,枚举和结构是所有的值类型。 字符串,数组,代表和类(即最多的事,真的)是引用类型。
如果我的理解是正确的,你可以完成一个“值类”,或不可变类,通过使用readonly
通过构造函数初始化成员变量。 一旦创建,不能更改。